#include<iostream>
#include<vector>
#include<queue>
using namespace std;
long long int dp[1100];
long long int win[1100], lose[1100], use[1100];
int main()
{
int n, m;
cin >> n >> m;
for (int i = 1; i <= n; i++)
scanf_s("%d%d%d", lose + i, win + i, use + i);
for (int j = 1; j <= n; j++)
{
for (int i = m; i >=0; i--)//为什么我变成从大到小就可以过了
{
if (i >= use[j])
dp[i] = max(dp[i] + lose[j], dp[i - use[j]] + win[j]);//是因为这里的i-use有后效性吗?
else dp[i] = max(dp[i], dp[i] + lose[j]);
}
}
cout << 5*(long long int )dp[m];
}
大家可以参观一下我的代码,非常乐意倾听意见!