问题
源码
#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 solve() {
int i,j;
memset(dp,0,sizeof(int)*(N+1)*(W+1));
for(i=1; i<=N; i++) {
for(j=1; j<=W; j++) {
if(w[i-1]>j) {
dp[i][j]=dp[i-1][j];
} else {
dp[i][j]=max(dp[i-1][j],dp[i-1][j-w[i-1]]+v[i-1]);
}
}
}
cout<<dp[N][W]<<"(";
memset(x,0,sizeof(int)*N);
for(i=N,j=W; i>0&&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;
for(i=0; i<=N; i++) {
for(j=0; j<=W; j++) {
cout<<dp[i][j]<<' ';
}
cout<<endl;
}
}
int main() {
solve();
return 0;
}