POJ3624(01背包:滚动 实现)
2016-02-09 10:45
267 查看
Charm Bracelet
Description
Bessie has gone to the mall's jewelry store and spies a charm bracelet. Of course, she'd like to fill it with the best charms possible from the N (1 ≤ N ≤ 3,402) available charms. Each charm i in the supplied list has a weight Wi (1 ≤ Wi ≤ 400), a 'desirability' factor Di (1 ≤ Di ≤ 100), and can be used at most once. Bessie can only support a charm bracelet whose weight is no more than M (1 ≤ M ≤ 12,880).
Given that weight limit as a constraint and a list of the charms with their weights and desirability rating, deduce the maximum possible sum of ratings.
Input
* Line 1: Two space-separated integers: N and M
* Lines 2..N+1: Line i+1 describes charm i with two space-separated integers: Wi and Di
Output
* Line 1: A single integer that is the greatest sum of charm desirabilities that can be achieved given the weight constraints
Sample Input
Sample Output
Time Limit: 1000MS | Memory Limit: 65536K | |
Total Submissions: 30417 | Accepted: 13576 |
Bessie has gone to the mall's jewelry store and spies a charm bracelet. Of course, she'd like to fill it with the best charms possible from the N (1 ≤ N ≤ 3,402) available charms. Each charm i in the supplied list has a weight Wi (1 ≤ Wi ≤ 400), a 'desirability' factor Di (1 ≤ Di ≤ 100), and can be used at most once. Bessie can only support a charm bracelet whose weight is no more than M (1 ≤ M ≤ 12,880).
Given that weight limit as a constraint and a list of the charms with their weights and desirability rating, deduce the maximum possible sum of ratings.
Input
* Line 1: Two space-separated integers: N and M
* Lines 2..N+1: Line i+1 describes charm i with two space-separated integers: Wi and Di
Output
* Line 1: A single integer that is the greatest sum of charm desirabilities that can be achieved given the weight constraints
Sample Input
4 6 1 4 2 6 3 12 2 7
Sample Output
23
#include"cstdio" #include"cstring" #include"algorithm" using namespace std; const int MAXN=3405; int dp[13000]; int n,W; int v[MAXN],w[MAXN]; int main() { while(scanf("%d%d",&n,&W)!=EOF) { memset(dp,0,sizeof(dp)); for(int i=0;i<n;i++) scanf("%d%d",&w[i],&v[i]); for(int i=0;i<n;i++) { for(int j=W;j>=w[i];j--) dp[j]=max(dp[j],dp[j-w[i]]+v[i]); } printf("%d\n",dp[W]); } return 0; }
相关文章推荐
- android调用音乐播放器,三种方
- uva 11538 组合
- 志不强者智不达
- 深入理解Aireplay-ng各种攻击及其原理
- AJAX
- 智慧北京开发第三天(上)
- Matches正则使用提取内容
- Jquery库和自己定义库的区别
- C++自制Redis数据库(八)基本数据结构--String
- eclipse安装和使用
- auto-boxing, uboxing,以及缓存问题
- 第六届蓝桥杯C/C++B组第七题 牌型种数(回溯)
- SHUOJ 1552 滑雪(小数据)(BFS)
- 如何禁止App在后台运行以及如何保存和恢复App的状态
- 如何禁止App在后台运行以及如何保存和恢复App的状态
- 如何禁止App在后台运行以及如何保存和恢复App的状态
- ad15 的redefine board shape 在哪
- minipad2
- HDU2602(01背包)
- E5 CPU +X79 CPU识别未知(Unknow CPU 的问题)