测试用例
输入:
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;
}