题解
2025-07-13 11:10:17
发布于:福建
2阅读
0回复
0点赞
#include <bits/stdc++.h>
using namespace std;
int a[120],b[120],c[120];
int dp[300][300],dp2[201][201][101];
int main(){
int m,v,n;
cin>>m>>v>>n;
for(int i=1;i<=n;++i){
cin>>a[i]>>b[i]>>c[i];
}
for(int i=1;i<=n;++i){
for(int j=m;j>=a[i];--j){
for(int k=v;k>=b[i];--k){
if(dp[j][k]<dp[j-a[i]][k-b[i]]+c[i]){
dp[j][k]=max(dp[j][k],dp[j-a[i]][k-b[i]]+c[i]);
for(int l=1;l<=n;++l){
dp2[j][k][l]=dp2[j-a[i]][k-b[i]][l];
}
dp2[j][k][i]=1;
}else if(dp[j][k]==dp[j-a[i]][k-b[i]]+c[i]){
bool flag=1;
for(int l=1;l<=n;++l){
if( dp2[j-a[i]][k-b[i]][l]>dp2[j][k][l]){
//dp2[j-a[i]][k-b[i]][l];
flag=0;
break;
}else{
break;
}
}
if(!flag){
for(int l=1;l<=n;++l){
dp2[j][k][l]=dp2[j-a[i]][k-b[i]][l];
}
}
dp2[j][k][i]=1;
}
}
}
}
cout<<dp[m][v]<<endl;
for(int i=1;i<=n;++i){
if(dp2[m][v][i]){
cout<<i<<" ";
}
}
return 0;
}
/*
2 3 3
1 2 1
2 3 2
1 1 1
*/
这里空空如也
有帮助,赞一个