【动态规划】[luoguP1156]垃圾陷阱
来源:互联网 发布:伺服电机plc编程实例 编辑:程序博客网 时间:2024/05/21 18:34
题目
用f[i][j]表示在投放第i个垃圾时垃圾高度为j的情况下最多能活到哪个时刻
因为可能这头牛活不到投最后一个垃圾的时候 所以最后要求ans
dp过程中第一次高度相加能大于等于h的时候这个时间就是最优解 可以直接输出时间 退出
代码如下
#include<iostream>#include<cstdio>#include<cctype>#include<algorithm> using namespace std; #define in = read(); typedef long long ll; typedef unsigned int ui; const ll size = 1000 + 100; struct point{ int t , f , h;}data[size]; int d , g; int num , ans; int f[size][size];inline ll read(){ ll num = 0 , f = 1; char ch = getchar(); while(!isdigit(ch)){ if(ch == '-') f = -1; ch = getchar(); } while(isdigit(ch)){ num = num*10 + ch - '0'; ch = getchar(); } return num*f;}inline bool cmp(point a , point b){ return a.t < b.t;}int main(){ d in; g in; for(register int i=1;i<=g;i++){ data[i].t in; data[i].f in; data[i].h in; } f[0][0] = 10; sort(data + 1 , data + g + 1 , cmp); for(register int i=0;i<g;i++) for(register int j=0;j<=d;j++) if(f[i][j] >= data[i + 1].t){ num = j + data[i + 1].h; if(num >= d){ printf("%d" , data[i + 1].t); return 0; } f[i + 1][j] = max(f[i + 1][j] , f[i][j] + data[i + 1].f); f[i + 1][num] = max(f[i + 1][num] , f[i][j]); } for(register int i=1;i<=g;i++) ans = max(ans , f[i][0]); printf("%d" , ans); return 0; }//COYG
阅读全文
0 0
- 【动态规划】[luoguP1156]垃圾陷阱
- |洛谷|动态规划|P1156 垃圾陷阱
- 垃圾陷阱
- 垃圾陷阱
- 洛谷1156 垃圾陷阱
- 洛谷P1156 垃圾陷阱
- 洛谷 P1156 垃圾陷阱
- Codevs 1684 垃圾陷阱
- 洛谷P1156 垃圾陷阱
- 洛谷1156垃圾陷阱
- 洛谷【P1156】垃圾陷阱
- 洛谷 P1156 垃圾陷阱
- SSL1673 垃圾陷阱(dp)
- 【SSLGZ 1673】垃圾陷阱
- 洛谷 P1156 垃圾陷阱
- 垃圾陷阱codevs1684
- 洛谷p1156垃圾陷阱
- P1156 垃圾陷阱
- java实现文件的压缩解决服务器(亲测windows server 2008)中文乱码
- DrawerLayout侧栏 加ViewPager +子布局横栏+XlistView
- LDAP 域操作
- Qt编译oracle数据库驱动oci
- 成员初始化语句块及执行顺序
- 【动态规划】[luoguP1156]垃圾陷阱
- 每个开发人员都应该知道的10个Linux命令
- CCF CSP认证考试历年真题 数字排序 C语言实现
- 常用正则表达式大全
- phpcms常用个调用代码
- 自定义时间选择器
- Spring事务的传播行为和隔离级别
- Linux共享内存
- nested exception is java.lang.IllegalStat eException:duplicate spring bean