问题
源码
#include<iostream>
#include<string.h>
using namespace std;
const int MAX_N=10,MAX_W=20,MAX_V=10;
int dp[MAX_N][MAX_W];
int N=4,W=5;
int w[MAX_W]= {2,1,3,2};
int v[MAX_V]= {3,2,4,2};
int x[MAX_N];
int max(int a,int b) {
return a>b?a:b;
}
int rec(int i, int j) {
if(dp[i][j]>0) {
return dp[i][j];
}
int res;
if(i==N) {
res=0;
} else if(j<w[i]) {
res=rec(i+1,j);
} else {
res=max(rec(i+1,j),rec(i+1,j-w[i])+v[i]);
}
return dp[i][j]=res;
}
int solve() {
int i,j;
memset(dp,-1,sizeof(int)*(N+1)*(W+1));
cout<<rec(0,W)<<"(";
memset(x,0,sizeof(int)*N);
for(i=0,j=W;i<N&&j>0;i++){
if(dp[i][j]>dp[i+1][j]){
x[i]=1;
j-=w[i];
}
}
for(i=0;i<N;i++){
if(x[i]==1){
cout<<i<<",";
}
}
cout<<"\b)"<<endl;
}
int main() {
solve();
return 0;
}