HDU 2602-Bone Collector(01背包-一/二维)
2016-05-14 09:32
337 查看
Bone Collector
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 47666 Accepted Submission(s): 19880
[align=left]Problem Description[/align]
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 ?
[align=left]Input[/align]
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.
[align=left]Output[/align]
One integer per line representing the maximum of the total value (this number will be less than 231).
[align=left]Sample Input[/align]
1
5 10
1 2 3 4 5
5 4 3 2 1
[align=left]Sample Output[/align]
14
[align=left]Author[/align]
Teddy
[align=left]Source[/align]
HDU 1st “Vegetable-Birds Cup” Programming Open Contest
[align=left]Recommend[/align]
lcy | We have carefully selected several similar problems for you: 1203 2159 2955 1171 2191
一维:
#include<iostream> #include<cstdio> #include<cstdlib> #include<cstring> #include<algorithm> using namespace std; int n[1001],v[1001]; int dp[1001]; int main() { int t; cin>>t; while(t--) { memset(dp,0,sizeof(dp)); int num,vol,i,j; cin>>num>>vol; for(i=0; i<num; ++i) cin>>v[i]; for(i=0; i<num; ++i) cin>>n[i]; for(i=0; i<num; ++i) for(j=vol; j>=n[i]; --j) dp[j]=max(dp[j],dp[j-n[i]]+v[i]); cout<<dp[vol]<<endl; } return 0; }
二维:
#include<iostream> #include<cstdio> #include<cstdlib> #include<cstring> #include<algorithm> using namespace std; int n[1001],v[1001]; int dp[1001][1001]; int main() { int t; cin>>t; while(t--) { int num,vol,i,j; cin>>num>>vol; for(i=0; i<num; ++i) cin>>v[i]; for(i=0; i<num; ++i) cin>>n[i]; for(i=0; i<num; ++i) for(j=0; j<=vol; ++j) if(j<n[i]) dp[i+1][j]=dp[i][j]; else dp[i+1][j]=max(dp[i][j],dp[i][j-n[i]]+v[i]); cout<<dp[num][vol]<<endl; } return 0; }
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- 关于指针的一些事情
- c++ primer 第五版 笔记前言
- share_ptr的几个注意点
- Lua中调用C++函数示例
- Lua教程(一):在C++中嵌入Lua脚本
- Lua教程(二):C++和Lua相互传递数据示例
- C++联合体转换成C#结构的实现方法
- C++高级程序员成长之路
- C++编写简单的打靶游戏
- C++ 自定义控件的移植问题
- C++变位词问题分析
- C/C++数据对齐详细解析
- C++基于栈实现铁轨问题
- C++中引用的使用总结
- 使用Lua来扩展C++程序的方法
- C++中调用Lua函数实例
- Lua和C++的通信流程代码实例
- C与C++之间相互调用实例方法讲解
- 解析C++中派生的概念以及派生类成员的访问属性