程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 杭電2602&&Bone Collector

杭電2602&&Bone Collector

編輯:C++入門知識

//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]);
  }
 }
}
     

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved