您的位置:首页 > 其它

[luogu1156]垃圾陷阱_动态规划_背包dp

2018-05-11 08:40 405 查看

垃圾陷阱 luogu-1156

    题目大意:Holsteins在距离地面D英尺的地方,FJ间隔时间ti会往下扔第i个垃圾。Holsteins对待每一个垃圾都会选择吃掉或者垫高。Holsteins有10个点儿的生命值,每个垃圾会给她提供f的生命值。每小时Holsteins会消耗一定的生命值。问:Holsteins最早可以什么时候爬出;否则输出Holsteins可以存活多长时间。

    注释:$2\le D\le 100$,$0 < t \le 1000$,$1\le h \le 25$,$1\le f \le 30$。

      想法:背包dp,和普通的背包不同的是如果这个物品不选,那么它会对Holsteins的生命值产生影响,稍微判断即可。

    最后,附上丑陋的代码... ...

// luogu-judger-enable-o2
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#define N 110
using namespace std;
struct Node
{
int t,h,l;
}f
;
int n,m;
int ti
;
int dp
;
inline bool cmp(Node a,Node b)
{
return a.t<b.t;
}
int main()
{
scanf("%d%d",&n,&m);
for(int i=1;i<=m;i++)
{
scanf("%d%d%d",&f[i].t,&f[i].l,&f[i].h);
}
sort(f+1,f+m+1,cmp);
dp[0]=10;
for(int i=1;i<=m;i++)
{
for(int j=n;j>=0;j--)
{
if(dp[j]>=f[i].t)
{
if(j+f[i].h>=n)
{
cout<<f[i].t;
return 0;
}
dp[j+f[i].h]=max(dp[j+f[i].h],dp[j]);
dp[j]+=f[i].l;
}
}
}
printf("%d\n",dp[0]);
return 0;
}

 

    小结:无。

 

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: