2564 Bone Collector骨骼收集家
标准01背包,唯一区别在于有多组数据。每次计算后记得置空。
#include<stdio.h>
#include<string.h>
int T,V,N;
int a[1005];
int v[1005];
int dp[1005];
int f(int a,int b)//一个比较方程,C++可以用内置的(同样的位置要改)
{
if(a>b)
return a;
else
return b;
}
int work()
{
int i,j;
scanf("%d %d",&V,&N);
for(i=1;i<=N;i++)
scanf("%d",&v[i]);
for(i=1;i<=N;i++)
scanf("%d",&a[i]);
for(i=1;i<=N;i++)
{
for(j=V;j>=v[i];j--)
dp[j]=f(dp[j],dp[j-v[i]]+a[i]);*//状态转移方程
}
printf("%d\n",dp[V]);
return 0;
}
int main()
{
int i;
scanf("%d",&T);
for(i=0;i<T;i++)
{
work();
memset(a,0,sizeof(a));
memset(dp,0,sizeof(dp));//置空
memset(v,0,sizeof(v));
}
return 0;
}