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的能存储的最大价值
}


京公网安备 11010502036488号