/*
* 0-1背包 [HDU-2602]
* mike-w
* 2012-10-21
* *************************************
* 一点心得:注意递推边界条件
*/
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define MAXN 1111
#define MAXV 1111
int T, N, V;
int v[MAXN], w[MAXN];
int opt[MAXN][MAXV];
int max(int e1, int e2)
{
return e1>e2?e1:e2;
}
int main(void)
{
int i, j;
scanf("%d", &T);
while(T-->0)
{
scanf("%d%d", &N, &V);
for(i=1; i<=N; i++)
scanf("%d", v+i);
for(i=1; i<=N; i++)
scanf("%d", w+i);
memset(opt, 0, sizeof(opt));
for(i=1; i<=N; i++)
for(j=0; j<=V; j++)
if(j>=w[i])
opt[i][j]=max(opt[i-1][j], opt[i-1][j-w[i]]+v[i]);
else
opt[i][j]=opt[i-1][j]; /* 最开始没有这一行,导致WA */
printf("%d\n", opt[N][V]);
}
return 0;
}
[HDU-2602] 0-1背包
最新推荐文章于 2022-07-27 15:53:18 发布