0-1背包算法

#include<stdio.h>
#include<stdlib.h>
#define W 6  ///物品数量
#define N 21  ///背包最大容量为20
int a[W] = { 0,2, 3, 4, 5, 9 }; ///每个物品对应的重量
int b[W][N] = { 0 };  ///存放各个容量段的能存储的最大价值
int value[W] = { 0,3, 4, 5, 8, 10 }; ///每个物品对应的价值

void beibao(){

    for (int k = 1; k < W; k++)
    {
        for (int c = 1; c < N; c++)
        {
            if (c < a[k])
            {
                b[k][c] = b[k - 1][c]; ///容量不够存放
            }
            else
            {
                int temp1 = b[k - 1][c - a[k]] + value[k];//捡起
                int temp2 = b[k - 1][c];//不捡
                b[k][c] = (temp1>temp2) ? temp1 : temp2; ///取最大价值
            }
        }
    }
}

void main()
{
    beibao();  ///进入算法
    printf("result:%d\n", b[5][20]);  ///输出容量为20的能存储的最大价值

}