洛谷1156 垃圾陷阱 dp
来源:互联网 发布:秦美人神奇升级数据 编辑:程序博客网 时间:2024/06/05 18:46
https://www.luogu.org/problem/show?pid=1156
这个题状态有很多种表示方法:
1. f[i]表示堆到i的高度时最大生命值是多少。
堆 f[i+a[j]]=max( f[ i+a[j] ] , f[i] ) ;
吃 f[i]=f[i]+b[j];
2. bool f[ i ][ j ]表示能否到达 i 高度, j 血量。
然后时间复杂度是n×T×D,由于DP的常数非常小,所以1亿左右的数据是可以大胆跑的。
#include<bits/stdc++.h>#define Max(x,y) x>y?x:yusing namespace std;struct per{ int t,f,h; void read() {scanf("%d%d%d",&t,&f,&h);}}p[105];bool cmp(per a,per b){return a.t<b.t;}bool dp[1500][350];int main(){ int d,g; scanf("%d%d",&d,&g); for(int i=1;i<=g;i++) p[i].read(); sort(p+1,p+g+1,cmp); int n=p[g].t; int ans=10; for(int i=0;i<=10;i++) dp[i][0]=1; for(int i=1;i<=g;i++) for(int j=n;j>=0;j--) for(int k=d;k>=0;k--) { if(dp[j][k]&&j>=p[i].t) { dp[j][k+p[i].h]=1; if(k+p[i].h>=d) { ans=p[i].t; printf("%d",ans); return 0; } dp[j+p[i].f][k]=1; } } ans=10; for(int i=1;i<=g;i++) { if(ans>=p[i].t) ans+=p[i].f; else break; } printf("%d",ans); return 0;}
1 1
- 洛谷1156 垃圾陷阱 dp
- 垃圾陷阱 洛谷1156 dp
- 【DP】洛谷 P1156 垃圾陷阱
- 洛谷1156 垃圾陷阱
- 洛谷1156垃圾陷阱
- 洛谷P1156 垃圾陷阱 背包DP
- SSL1673 垃圾陷阱(dp)
- 垃圾陷阱(模拟\dp)
- 洛谷P1156 垃圾陷阱(DP,0-1背包)
- 洛谷P1156 垃圾陷阱
- 洛谷 P1156 垃圾陷阱
- 洛谷P1156 垃圾陷阱
- 洛谷【P1156】垃圾陷阱
- 洛谷 P1156 垃圾陷阱
- 洛谷 P1156 垃圾陷阱
- 洛谷p1156垃圾陷阱
- 洛谷 [P1156] 垃圾陷阱
- P1156 垃圾陷阱(dp)有待理解
- php 利用fsockopen GET/POST 提交表单及上传文件
- Centos 7 学习之添加用户
- 嵌入式linux基础教程第二版 第二章续
- 组合数学(象棋中的皇后,uva 11538)
- ios常见面试题之基础
- 洛谷1156 垃圾陷阱 dp
- p图代码
- 牛顿法与拟牛顿法学习笔记(四)BFGS 算法
- MySql replace into ,merge into ,ON DUPLICATEKEY UPDATE 语法
- C#——对象序列化为json
- hibernate 映射关系
- Java 中 Comparable 和 Comparator 比较
- wxPython 在线资料
- pkg-config --libs --cflags