下载数据本地测试没什么问题,但是RE。
提交的代码如下:
/*
状态:(group,weight,group_member)
对于每一种状态,可取或不取
若取,则状态可能更新为(group-1,weight-weight【group_member[i]】)+value【group_member[i]】
*/
#include<cstdio>
#include<vector>
using namespace std;
struct kind_t{vector<int> member;}group[103];//组
int main(){
int n,m,x,n_gr=1;
scanf("%d%d",&m,&n);
vector<int> dp(m+1,0);
int wei[m+1],val[m+1];
wei[0]=val[0]=0;
for(int i=1;i<=n;++i){//输入&存数
scanf("%d%d%d",&wei[i],&val[i],&x);
group[x].member.push_back(i);
if(n_gr<x) n_gr=x;
}
for(int gr=1;gr<=n_gr;++gr){//枚举组数
for(int i=m;i>=1;--i){//枚举重量
for(int mem=0;mem<group[gr].member.size();++mem){//枚举成员
if(wei[group[gr].member[mem]]>i) continue;
if(dp[i] < dp[i - wei[ group[gr].member[mem]] ] + val[ group[gr].member[mem] ])
dp[i] = dp[i - wei[ group[gr].member[mem]] ] + val[ group[gr].member[mem] ];
}
}
}
printf("%d",dp[m]);
return 0;
}