Dynamic Programming
// 0_1 knapsack problem solving // Dynamic Programming #include<stdio.h> #define MaxN 20 #define MaxW 100 you Knap (you f [MaxN] [MaxW], you w [], you v [], you W, you're n) { // dynamic programming array f [] [] int i,r; for(i=0;i<=n;i++) f[i][0] = 0; for(r=0;r<=W;r++) f[0][r] = 0; for(i=1;i<=n;i++){ for(r=1;r<=W;r++){ if(r < w[i]) f[i][r] = f[i-1][r]; else{ if(f[i-1][r] < f[i-1][r-w[i]] + v[i]) f[i][r] = f[i-1][r-w[i]] + v[i]; else f[i][r] = f[i-1][r]; } } } return f[n][W]; } int Traceback(int f[MaxN][MaxW],int w[],int x[],int W,int n){ int i,r=W; int maxw = 0; for(i=n;i>0;i--){ if(f[i][r] != f[i-1][r]){ x[i] = 1; maxw += w[i]; r = r - maxw; } else x[i] = 0; } return maxw; } void dispknap(int x[],int maxw,int maxv,int n){ int i; printf ( "Best Backpacker program is: \ n"); for(i=0;i<=n;i++){ if(x[i] == 1) printf ( "% d kind selected first article \ n", i); } printf ( "total wt =% d, the total value =% d", maxw, maxv); } int main () { int f[MaxN][MaxW]; int x[MaxN]; int maxv; int maxw; int n=5,W=10; int w[MaxN] = {0,2,2,6,5,4}; int v[MaxN] = {0,6,3,5,4,6}; maxv = knap(f,w,v,W,n); maxw = Traceback(f,w,x,W,n); dispknap(x,maxw,maxv,n); return 0; }