调了一个晚上了
#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;
}