#include <stdio.h>
#include <stdlib.h>
#define WEIGHT 10
#define NUM 5
int main()
{
int w[NUM + 1] = {0,2,2,6,5,4};
int p[NUM + 1] = {0,6,3,5,4,6};
int c[NUM + 1][WEIGHT + 1] = {0};
for (int i = 1; i <= NUM; i++)
{
int k = i;
for (int v = 1; v <= WEIGHT; v++)
{
if (w[i] <= v)
{
if (c[i - 1][v - w[i]] + p[i] > c[i - 1][v])
{
c[i][v] =c[i - 1][v - w[i]] + p[i];
}
else
{
c[i][v] = c[i - 1][v];
}
}
else
{
c[i][v] = c[i - 1][v];
}
}
}
int s[NUM + 1] = {0};
for (int k = NUM, x = WEIGHT; k > 0; k--)
{
if (c[k - 1][x - w[k]] + p[k] > c[k - 1][x])
{
s[k] = 1;
x = x - w[k];
}
}
printf("%d\n", c[5][10]);
/* for (int j = 1; j <= NUM; j++)
{
for (int i = 1; i <= WEIGHT; i++)
printf("%d ", c[j][i]);
printf("\n");
}
printf("\n");
*/
for (int yy = 1; yy <= NUM; yy++)
{
printf("%d ", s[yy]);
}
return 0;
}
0-1背包问题(动态规划C语言实现)
最新推荐文章于 2024-09-17 23:07:02 发布