问题
源码
#include<iostream>
#include<string.h>
using namespace std;
const int MAX_N=100;
const int MAX_W=10000;
int w[MAX_N]= {3,4,2};
int v[MAX_N]= {4,5,3};
int dp[MAX_N+1][MAX_W+1];
int x[MAX_N];
int N=3;
int W=7;
void 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][j-w[i-1]]+v[i-1]);
}
}
}
for(i=N,j=W; i>0||j>0;) {
if(dp[i][j]==dp[i-1][j]) i--;
else {
j-=w[i-1];
x[i-1]++;
}
}
}
int main() {
int i,j;
solve();
cout<<dp[N][W]<<"(";
for(i=0; i<N; i++) {
cout<<i+1<<"号物品选"<<x[i]<<"个,";
}
cout<<"\b)"<<endl;
for(i=0;i<=N;i++){
for(j=0;j<=W;j++){
cout<<dp[i][j]<<" ";
}
cout<<endl;
}
return 0;
}