题解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 垃圾陷阱的主要内容,如果未能解决你的问题,请参考以下文章

[luogu]P1156 垃圾陷阱[DP]

Luogu P1156 垃圾陷阱

Luogu P1156 垃圾陷阱 dpBy cellur925

P1156 垃圾陷阱

洛谷 P1156 垃圾陷阱

P1156 垃圾陷阱