逝当地加了点注释。
#include <iostream>
using namespace std;
int V, n, k;
long long w[105][1005], v[105][1005], cnt[105]; // w[i][j]表示第i组第j个物品的重量,v同理。cnt[i]表示第i组物品的个数
long long f[105]; // DP数组
int main() {
cin >> V >> n; // V件物品,总重量n。
for (int i = 1, a, b, c ; i <= n ; i++) {
cin >> a >> b >> c;
k = max(k, c);
cnt[c]++;
w[c][cnt[c]] = a;
v[c][cnt[c]] = b;
}
// DP的遍历顺序什么的好像都没错。
for (int g = 1 ; g <= k ; g++)
if (cnt[g]) /*似乎没用的小优化*/ for (int i = V ; i - 1 ; i--)
for (int j = 1 ; j <= cnt[g] ; j++)
if (i >= w[g][j])
f[i] = max(f[i], f[i - w[g][j]] + v[g][j]);
cout << f[V];
return 0;
}
寄录,我不李姐,别人都不 T 就我 T,代码里似乎也找不到效率瓶颈 QAQ。