您的位置:首页 > 编程语言 > C语言/C++

0-1背包问题-C语言实现

2017-08-03 23:03 316 查看
测试用例

输入:

3 6

4 3 2

5.0 4.0 1.0

输出:

6

#include<stdio.h>
#include<string.h>

double binaryKnapsack(int numItems, int *w, double *v, int capacity)
{
int i, j;
double Val[MaxC];
memset(Val, 0, sizeof(Val));
for (i = 0; i < numItems; ++i)
for (j = capacity; j >= 0; j--)
if (j >= w[i] && Val[j] < Val[j - w[i]] + v[i])
Val[j] = Val[j - w[i]] + v[i];
return Val[capacity];
}

int main()
{
int i, n, C, w[MaxN];
double v[MaxN];
double ans;
while (scanf("%d%d", &n, &C) != EOF)
{
for (i = 0; i < n; ++i)
scanf("%d", &w[i]);
for (i = 0; i < n; ++i)
scanf("%lf", &v[i]);
ans = binaryKnapsack(n, w, v, C);
printf("%.1f\n", ans);
}

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  01背包 算法 c语言