题解luogu p1156 垃圾陷阱
Posted lovezxy520
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了题解luogu p1156 垃圾陷阱相关的知识,希望对你有一定的参考价值。
背包
总结:
1.状态要根据问的问题设计,一开始我设计dp[i]是在i时间时的最高高度,而题目卡门最长可以活多久,这样设计的话若不能出去,则这个不好判断。所以设计为dp[i]是在i的高度时,卡门最多可以后活多久,这样问题便迎刃而解。
2.不用将牛的寿命减去时间,直接将牛可以存活的时间与当前时间比较即可。
3.关于状态设计时, dp[j+a[i].h] = max(dp[j+a[i].h], dp[j]);这个是选择堆积时,我们这时候直接选择最大的寿命即可
dp[j] += a[i].f; 这个是选则吃垃圾时的最大寿命。
#include<bits/stdc++.h> using namespace std; struct node int t, f, h; a[105]; int d, g, dp[105]; bool cmp(node x, node y) return x.t < y.t; int main() cin >> d >> g; for(int i = 1; i <= g; i++) cin >> a[i].t >> a[i].f >> a[i].h; sort(a+1, a+1+g, cmp); memset(dp, -0x3f, sizeof(dp)); dp[0] = 10; for(int i = 1; i <= g; i++) for(int j = d; j >= 0; j--) if(dp[j] >= a[i].t) if(a[i].h+j >= d) cout << a[i].t; return 0; dp[j+a[i].h] = max(dp[j+a[i].h], dp[j]); dp[j] += a[i].f; cout << dp[0]; return 0;
以上是关于题解luogu p1156 垃圾陷阱的主要内容,如果未能解决你的问题,请参考以下文章