博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Rain and Umbrellas(dp)
阅读量:5066 次
发布时间:2019-06-12

本文共 1281 字,大约阅读时间需要 4 分钟。

题目链接

令dp[i][j]为走到目标为i处,手里拿着第j把伞,同时注意,在某处可能存在不止一把伞

#include 
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;#pragma comment(linker, "/stck:1024000000,1024000000")#define lowbit(x) (x&(-x))#define max(x,y) (x>=y?x:y)#define min(x,y) (x<=y?x:y)#define MAX 100000000000000000#define MOD 1000000007#define pi acos(-1.0)#define ei exp(1)#define PI 3.1415926535897932384626433832#define ios() ios::sync_with_stdio(true)#define INF 0x3f3f3f3f#define mem(a) (memset(a,0,sizeof(a)))typedef long long ll;int dp[2006][2006],a,n,m;int rain[2006],umbre[2006];int val[2006],pos[2006];int main(){ scanf("%d%d%d",&a,&n,&m); memset(rain,0,sizeof(rain)); memset(umbre,0,sizeof(umbre)); a++; for(int i=0,x,y;i
i) continue; if(j) dp[i+1][j]=min(dp[i+1][j],dp[i][j]+val[j]); if(!rain[i]) dp[i+1][0]=min(dp[i+1][0],dp[i][j]); if(umbre[i]) dp[i+1][umbre[i]]=min(dp[i+1][umbre[i]],dp[i][j]+val[umbre[i]]);//同一个点可能存在多个雨伞 } } int ans=INF; for(int i=0;i<=m;i++) ans=min(ans,dp[a][i]); printf("%d\n",ans>=INF?-1:ans); return 0;}

 

转载于:https://www.cnblogs.com/shinianhuanniyijuhaojiubujian/p/9151923.html

你可能感兴趣的文章
一天一道算法题--5.30---递归
查看>>
switchcase的用法
查看>>
React.js 小书 Lesson15 - 实战分析:评论功能(二)
查看>>
Java基础03 构造器与方法重载
查看>>
软件项目经理职责[转](
查看>>
辗转相除求最大公约数
查看>>
Redis 主从集群搭建及哨兵模式配置
查看>>
nginx ------反向代理和负载均衡
查看>>
Linux下安装JDK
查看>>
[HDU] 3711 Binary Number [位运算]
查看>>
908. Smallest Range I
查看>>
ThinkPHP 分页实现
查看>>
jQuery在线手册
查看>>
APPLE-SA-2019-3-25-3 tvOS 12.2
查看>>
Python定义点击右上角关闭按钮事件
查看>>
刚刚开始
查看>>
Optional 的基本用法
查看>>
洋葱第4场C和D题解……
查看>>
php实现隐藏字符串的功能
查看>>
设计模式08: Composite 组合模式(结构型模式)
查看>>