求助
查看原帖
求助
561949
syr1125楼主2024/1/21 20:47
#include <bits/stdc++.h>
using namespace std;

int n, H;
struct trash
{
	int t, f, h;
}a[1005];
int dp[1005][105];

bool cmp(trash a, trash b)
{
	return a.t < b.t;
}

int main()
{
	memset(dp, -1, sizeof dp);
	cin >> H >> n;
	for (int i = 1; i <= n; i ++)
	{
		cin >> a[i].t >> a[i].f >> a[i].h;
	}
	sort(a + 1, a + 1 + n, cmp);
	dp[0][0] = 10, a[n + 1].t = a[n].t;
	for (int i = 0; i <= n; i ++)
	{
		for (int j = 0; j <= H; j ++)
		{
			if (dp[i][j] < 0) continue;
			if (j + a[i].h >= H && dp[i][j] - (a[i + 1].t - a[i].t) >= 0)
			{
				cout << a[i].t << endl;
				return 0;
			}
			dp[i + 1][j + a[i].h] = max(dp[i + 1][j + a[i].h], dp[i][j] - (a[i + 1].t - a[i].t));
			dp[i + 1][j] = max(dp[i + 1][j], dp[i][j] - (a[i + 1].t - a[i].t) + a[i].f);
		}
	}
	
	int maxn = 0, h = 10;
	for (int i = 1; i <= n + 1; i ++)
	{
		h = h - (a[i].t - a[i - 1].t) + a[i].f;
		maxn = max(maxn, h);
	}
	cout << maxn << endl;
	return 0;
}

36pts,刷表法

2024/1/21 20:47
加载中...