样例过了
#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std;
const int N = 2010;
int t[N], d[N], p[N];
struct Node {
int pr = 0, cur = 0;
}f[N];
// f[i]为第i单位时间能救的最大价值
int a[N][N];
int main() {
ios::sync_with_stdio(false);
cin.tie(0), cout.tie(0);
int n;
cin >> n;
int mx = -2e9;
for (int i = 1; i <= n; ++i) {
cin >> t[i] >> d[i] >> p[i];
mx = max(mx, d[i]);
}
for (int i = 1; i <= n; ++i) {
for (int j = d[i] - 1; j >= t[i]; --j) {
int q = f[j].pr;
f[j].pr = max(f[j].pr, f[j - t[i]].pr + p[i]);
f[j].cur = f[j - t[i]].cur + 1;
if (f[j].pr != q) {
f[j].cur = f[j - t[i]].cur;
for (int k = 1; k <= f[j - t[i]].cur; ++k) {
a[j][k] = a[j - t[i]][k];
}
a[j][++f[j].cur] = i;
}
}
}
cout << f[mx - 1].pr << "\n" << f[mx - 1].cur << "\n";
for (int i = 1; i <= 100; ++i) {
if (a[mx - 1][i] != 0) {
cout << a[mx - 1][i] << ' ';
}
else break;
}
return 0;
}