54pts,求助悬棺
查看原帖
54pts,求助悬棺
581345
Zpril_20211017楼主2023/8/15 21:13

调了一个晚上了

#include <bits/stdc++.h>
using namespace std;

int t[101],h[101],f[101],dp[1026];

int main()
{
    int d,g;
    cin >> d >> g;
    memset(dp,-1,sizeof(dp));//-1表示不可能到达的高度
    dp[0] = 10;
    for(int i = 1;i <= g;i++)
        cin >> t[i] >> f[i] >> h[i];
    for(int i = 1;i <= g;i++)//i:物品
    {
        for(int j = d;j >= 0;j--)//j:高度
        {
            if(dp[j] >= t[i] - t[i - 1])//dp[j]:达到 j 高度时最大生命值
            {
                dp[j + h[i]] = max(dp[j + h[i]],dp[j] - (t[i] - t[i - 1]));//堆
                dp[j] = max(dp[j],dp[j] + f[i] - (t[i] - t[i - 1]));//吃
            }
            if(dp[j + h[i]] >= 0 && j + h[i] >= d)//爬出去
            {
                cout << t[i];
                return 0;
            }
        }
    }
    //rip
    int health = 10;//剩余存活的时间
    for(int i = 1;i <= g;i++)
    {
        health += f[i] - (t[i] - t[i - 1]);
        if(health < 0)
        {
            cout << t[i] + health;
            return 0;
        }
    }
    cout << t[g] + health;//吃掉所有垃圾
    return 0;
}
2023/8/15 21:13
加载中...