没有理清所限制的高度之间的关系。
需要反复理解。
#include <bits/stdc++.h>
using namespace std;
const int N = 1e3 + 10, M = 5e5 + 10;
int n;
//int h[N],a[N],s[N];
//int hh,aa,ss;
int t = 0;
int f[M];
struct node{
int h;
int a,s;
}c[N];
bool cmp(node a, node b){
return a.a < b.a;
}
int main(){
cin >> n;
for(int i = 1; i <= n; i++){
cin >> c[i].h >> c[i].a >> c[i].s;
}
sort(c + 1, c + n + 1, cmp);
for(int i = 1; i <= n; i++){
for(int k = 1; k <= c[i].s; k++){
for(int j = c[i].a; j>= c[i].h; j--){
f[j] = max(f[j],f[j - c[i].h] + c[i].h);
}
}
}
// cout << f[c[n].a] << endl;
/*
若直接输出最大的c[n].a;
cout << f[c[n].a] << endl;
只能过部分点。
说明最后的最大高度的f[j],可能不是最优解。
说明, 1<=ai <= 40000中存在一个最优解
*/
//当遍历1到M时,可以通过洛谷当前的所有的测试点
int ans = 0;
for(int i = M; i >= 1; i--){
ans = max(ans, f[i]);
}
cout << ans << endl;
return 0;
}