#include<bits/stdc++.h>
using namespace std;
const int N = 10000;
int f[N][N],n,m,pos;
struct object{
int w,v,id;
}a[N];
vector<int>e[N];
int main(){
ios::sync_with_stdio(false);
cin.tie(0),cout.tie(0);
map<int,bool>vis;
cin >> m >> n;
for(int i = 1;i <= n;i++){
cin >> a[i].w >> a[i].v >> a[i].id;
e[a[i].id].emplace_back(i);
if(!vis[a[i].id]){
pos ++;
vis[a[i].id] = true;
}
}
for(int k = 1;k <= pos;k++){
for(int j = 1;j <= m;j++){
for(auto i : e[k]){
if(j >= a[i].w){
f[k][j] = max(f[k - 1][j],f[k - 1][j - a[i].w] + a[i].v);
}
else f[k][j] = f[k - 1][j];
}
}
}
cout << f[pos][m];
return 0;
}
如上这段代码,为什么是错的,但去掉第一维后却对了?