基础算法 01背包问题

 

#include <stdio.h>
#define N 6
#define W 21

int B[N][W] = {0};
int w[6] = {0,2,2,6,6,4};
int v[6] = {0,6,3,5,4,6};

void knapsack() {
        int k,C;
        for (k=1;k<N;k++) {
                for(C=1;C<W;C++) {
                if(w[k] > C)
                {
                        B[k][C] = B[k-1][C];
                }
                else {
                        int value1 = B[k-1][C-w[k]]+v[k];
                        int value2 = B[k-1][C];
                        if (value1 > value2) {
                                B[k][C] = value1;
                        }
                        else {
                                B[k][C] = value2;
                        }
                }
        }
        }
}


int main()
{
        knapsack();
        printf("%d\n",B[5][20]);
        return 0;
}

  

posted @ 2016-12-11 21:42  heimohe  阅读(340)  评论(0)    收藏  举报