本文主要是介绍hdu 2602 Bone Collector 0-1背包;,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
分析:0-1背包dp[i][j]扫到第i件物品时,总花费不超过j的情况下所能得到的最大价值,那么第i件物品可取可不取#include <iostream> #include <cstdio> #include <cstring> #include <cstdlib> #include <cmath> #include <vector> #include <queue> #include <map> #include <algorithm> #include <set> using namespace std; #define MM(a) memset(a,0,sizeof(a)) typedef long long ll; typedef unsigned long long ULL; const int mod = 1000000007; const double eps = 1e-10; const int inf = 0x3f3f3f3f; const int big=50000; int value[1005],volume[1005],dp[1005][1005]; int main() {int cas;cin>>cas;while(cas--){int n,vl;scanf("%d %d",&n,&vl);for(int i=1;i<=n;i++)scanf("%d",&value[i]);for(int i=1;i<=n;i++)scanf("%d",&volume[i]);memset(dp,0,sizeof(dp));for(int i=1;i<=n;i++)for(int j=0;j<=vl;j++)if(j>=volume[i])dp[i][j]=max(dp[i-1][j],dp[i-1][j-volume[i]]+value[i]);elsedp[i][j]=dp[i-1][j];printf("%d\n",dp[n][vl]);}return 0; }
这篇关于hdu 2602 Bone Collector 0-1背包;的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!