DP 问题;理解状态转移方程;原来只需加一个math.h就可以调用max;orz;
#include <stdio.h>
#include <string.h>
#define MAX 1005
int D[MAX];
int max(int a, int b);
int main(int argc, char *argv[]) {
int T;
scanf("%d",&T);
while(T--)
{
int n,V,j;
scanf("%d %d",&n,&V);
int w[n];
int v[n];
memset(w,0,sizeof(w));
memset(v,0,sizeof(v));
for(int i=1; i <= n; i++)
scanf("%d",&w[i]);
for(int i=1; i <= n; i++)
scanf("%d",&v[i]);
memset(D,0,sizeof(D));
for(int i=1; i <= n; i++)
for(j = V; j >= v[i]; j--)
{
D[j] = max(D[j],D[j-v[i]] + w[i]);
}
printf("%d\n",D[V]);
}
return 0;
}
int max(int a, int b)
{
return (a>b) ? a : b;
}