2564 Bone Collector骨骼收集家

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;
}

猜你喜欢

转载自blog.csdn.net/lumingjia819/article/details/52297137