求0/1背包问题的非递归算法
设被包容量为m,有n件物品,质量为m1,m2,...mn,均为正整数,要从n件物品中挑选若干使得背包质量之和正好为m。书上给了递归算法,我想知道非递归算法,谢谢各位了
#define MAXC 60000
int _dp[2][MAXC+1];
struct{
int* operator [] (int i){
return _dp[i&1];
}
}dp;int knapsack(int* w,int* v,int n,int c){
for(int r=0;r<=c;r++){
if(w[0]>r)dp[0][r]=0;
else dp[0][r]=v[0];
}
for(int k=1;k<n;k++){
dp[k][0]=0;
for(int r=1;r<=c;r++){
dp[k][r]=dp[k-1][r];
if(r>=w[k] && dp[k-1][r-w[k]]+v[k]> dp[k][r]){
dp[k][r]=dp[k-1][r-w[k]]+v[k];
}
}
}
return dp[n-1][c];
}