Bone Collector(01背包)
来源:互联网 发布:mac winebottler 1.8 编辑:程序博客网 时间:2024/05/16 02:13
Many years ago , in Teddy’s hometown there was a man who was called “Bone Collector”. This man like to collect varies of bones , such as dog’s , cow’s , also he went to the grave …
The bone collector had a big bag with a volume of V ,and along his trip of collecting there are a lot of bones , obviously , different bone has different value and different volume, now given the each bone’s value along his trip , can you calculate out the maximum of the total value the bone collector can get ?
Input
The first line contain a integer T , the number of cases.
Followed by T cases , each case three lines , the first line contain two integer N , V, (N <= 1000 , V <= 1000 )representing the number of bones and the volume of his bag. And the second line contain N integers representing the value of each bone. The third line contain N integers representing the volume of each bone.
Output
One integer per line representing the maximum of the total value (this number will be less than 2 31).
Sample Input
1
5 10
1 2 3 4 5
5 4 3 2 1
Sample Output
14
一维dp数组AC代码:
#include<cstdio>#include<iostream>#include<cstring>#include<cmath>#include<algorithm>using namespace std;const int MAX = 5010;int a[MAX];int dp[MAX];int n;struct node{ int value,V;}p[MAX];bool cmp(node a,node b){ return a.value>b.value;}int main(){ int t; scanf("%d",&t); while(t--) { int n,v; memset(dp,0,sizeof(dp)); scanf("%d%d",&n,&v); for(int i=0;i<n;i++) { scanf("%d",&p[i].value); } for(int i=0;i<n;i++) { scanf("%d",&p[i].V); } sort(p,p+n,cmp); for(int i=0;i<n;i++) { for(int j=v;j>=p[i].V;j--) { dp[j]=max(dp[j],dp[j-p[i].V]+p[i].value); } } printf("%d\n",dp[v]); } return 0;}
二维dp数组AC代码:
#include<cstdio>#include<cmath>#include<cstring>#include<algorithm>using namespace std;const int MAX = 2000+10;int dp[MAX][MAX];struct Node{ int V; int value;}p[MAX];int main(){ int t; scanf("%d",&t); while(t--) { memset(dp,0,sizeof(dp)); int n,v; scanf("%d%d",&n,&v); for(int i=1;i<=n;i++) { scanf("%d",&p[i].value); } for(int i=1;i<=n;i++) { scanf("%d",&p[i].V); } for(int i=1;i<=n;i++) { for(int j=0;j<=v;j++) { if(j>=p[i].V)//如果还能继续装 dp[i][j]=max(dp[i-1][j],dp[i-1][j-p[i].V]+p[i].value); else//剩余体积不足以继续装 dp[i][j]=dp[i-1][j]; } } printf("%d\n",dp[n][v]); } return 0;}
- Bone Collector(01背包)
- Bone Collector(01背包)
- Bone Collector(01背包)
- Bone Collector(01背包)
- Bone Collector(01背包)
- 01背包(Bone Collector)
- Bone Collector(01背包)
- Bone Collector (01背包)
- Bone Collector(01背包)
- Bone Collector(01背包)
- Bone Collector 01背包
- Bone Collector -01背包
- 01背包,Bone Collector
- 【01背包】Bone Collector
- 【01背包】Bone Collector
- hdu2062 Bone Collector(01背包)
- hdu 2602 Bone Collector (01背包)
- Bone Collector(01背包问题入门)
- HDU 6113 度度熊的01世界(dfs)
- 高性能PHP apache httpd 2.4.x使用mod_proxy_fcgi和php-fpm
- struts2之01了解和简单的运用
- Billboard
- 嵌套(任意层)JSON解析转换为Map
- Bone Collector(01背包)
- 随机数的产生
- 分布式系统选举算法剖析
- F
- 今夕何年(模拟日期)
- Java泛型应用
- 问题 F: 小ho的01串
- [ Laravel 5.4 文档 ] 综合话题 —— 辅助函数
- JAVA中枚举类型enum综合详解