当前位置:编程学习 > C/C++ >>

杭电2602&&Bone Collector

//01背包问题
#include<stdio.h>
#include<string.h>

int max(int a,int b)
{
 if(a>b)
  return a;
 return b;
}
void main()
{
 int dp[1005];//记录下V的背包空间可以获得的最大价值量
 int  val[1005];
 int  bone[1005];
 int T;
 int N,V;
 int i,j;
 while(scanf("%d",&T)!=EOF)
 {
  while(T--)
  {
   scanf("%d%d",&N,&V);
   for(i=1;i<=N;i++)
    scanf("%d",&val[i]);
         for(i=1;i<=N;i++)
    scanf("%d",&bone[i]);
   memset(dp,0,sizeof(dp));

   for(i=1;i<=N;i++)
    for(j=V;j>=0;j--)
     if(j>=bone[i])
      dp[j]=max(dp[j],dp[j-bone[i]]+val[i]);

   printf("%d\n",dp[V]);
  }
 }
}
     

补充:软件开发 , C++ ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,