Bone Collector hdu 2602

题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=2602


#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;

#define maxn  1010

int  N[maxn];
int  V[maxn];
int T;
int n,v;
int dp[maxn][maxn];
void A(){
    memset(dp,0,sizeof(dp));
    for(int i=1;i<=n;i++)
    {
        for(int j=0;j<=v;j++)
        {
            if(N[i]>j) dp[i][j]=dp[i-1][j];
            else
            {   if(N[i]<=j)
                dp[i][j]=max(dp[i-1][j],dp[i-1][j-N[i]]+V[i]);
            }
            
        }
    }
}
int main()
{

   // freopen("test","r",stdin);
    cin>>T;
    for(int i=0;i<T;i++)
    {
        cin>>n>>v;
        for(int ii=1;ii<=n;ii++) cin>>V[ii];
        for(int j=1;j<=n;j++)   cin>>N[j];
        A();

     /*   for(int m=0;m<=n;m++){
             for(int jj=0;jj<=v;jj++)
             cout<<dp[m][jj]<<' ';     // 输出dp 数组
             cout<<endl;
        }
       
*/
        cout<<dp[n][v]<<endl;
    }


    return 0;
}

猜你喜欢

转载自www.cnblogs.com/lkfsblogs/p/12642257.html