<背包DP>codevs 1684 垃圾陷阱

来源:互联网 发布:用js怎么写九九乘法表 编辑:程序博客网 时间:2024/06/08 18:19

去题面的传送门

求最早什么时候出来?
把高度看做背包的容量,能量看做物品的价值。特判一下在使用这个“物品”时,能量是否大于等于现在的时间。注意读入的数据还要按照时间排一下序。一旦高度达到,立刻输出时间。如果一直没有找到可行的方案,直接输出dp[0]

代码:

#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>using namespace std;const int maxn=1000+10;int D,G;int dp[maxn];struct hh{    int t,v,w;}e[maxn];bool cmp(hh x,hh y){    return x.t<y.t;}int main(){    scanf("%d%d",&D,&G);    for(int i=1;i<=G;++i) scanf("%d%d%d",&e[i].t,&e[i].w,&e[i].v);    sort(e+1,e+G+1,cmp);    dp[0]=10;    for(int i=1;i<=G;++i)       for(int j=D;j>=0;--j)      if(dp[j]>=e[i].t)      {        if(j+e[i].v>=D)         {            printf("%d",e[i].t);            return 0;        }        dp[j+e[i].v]=max(dp[j+e[i].v],dp[j]);        dp[j]+=e[i].w;      }    printf("%d",dp[0]);    return 0;}
原创粉丝点击