很简单的背包,除了我一开始统计错了路径
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
int m,v,n;
int a[101],b[101],c[101];
string f[301][301];
int Aimee[201][201];
int use[201];
int x,y,z;
void find(int x,int y){
for(int i=0;i<f[x][y].length();++i){
cout<<(int) f[x][y][i]<<" ";
}
}
int mAimeen(){
scanf("%d%d%d",&m,&v,&n);
for(int i=1;i<=n;++i){
scanf("%d%d%d",&a[i],&b[i],&c[i]);
}
for(int i=1;i<=n;++i){
for(int j=m;j>=a[i];--j){
for(int z=v;z>=b[i];--z){
if(Aimee[j][z]<Aimee[j-a[i]][z-b[i]]+c[i]){
Aimee[j][z]=Aimee[j-a[i]][z-b[i]]+c[i];
f[j][z]=f[j-a[i]][z-b[i]]+(char)i;
}
}
}
}
cout<<Aimee[m][v]<<endl;
find(m,v);
return 0;
}