Charm Bracelet-POJ3624(01背包)
2015-12-10 19:46
405 查看
http://poj.org/problem?id=3624
CharmBracelet
Description
Bessiehasgonetothemall'sjewelrystoreandspiesacharmbracelet.Ofcourse,she'dliketofillitwiththebestcharmspossiblefromtheN(1≤N≤3,402)availablecharms.EachcharmiinthesuppliedlisthasaweightWi(1≤Wi≤400),a'desirability'factorDi(1≤Di≤100),andcanbeusedatmostonce.BessiecanonlysupportacharmbraceletwhoseweightisnomorethanM(1≤M≤12,880).
Giventhatweightlimitasaconstraintandalistofthecharmswiththeirweightsanddesirabilityrating,deducethemaximumpossiblesumofratings.
Input
*Line1:Twospace-separatedintegers:NandM
*Lines2..N+1:Linei+1describescharmiwithtwospace-separatedintegers:WiandDi
Output
*Line1:Asingleintegerthatisthegreatestsumofcharmdesirabilitiesthatcanbeachievedgiventheweightconstraints
SampleInput
SampleOutput
CharmBracelet
TimeLimit:1000MS | MemoryLimit:65536K | |
TotalSubmissions:29444 | Accepted:13198 |
Bessiehasgonetothemall'sjewelrystoreandspiesacharmbracelet.Ofcourse,she'dliketofillitwiththebestcharmspossiblefromtheN(1≤N≤3,402)availablecharms.EachcharmiinthesuppliedlisthasaweightWi(1≤Wi≤400),a'desirability'factorDi(1≤Di≤100),andcanbeusedatmostonce.BessiecanonlysupportacharmbraceletwhoseweightisnomorethanM(1≤M≤12,880).
Giventhatweightlimitasaconstraintandalistofthecharmswiththeirweightsanddesirabilityrating,deducethemaximumpossiblesumofratings.
Input
*Line1:Twospace-separatedintegers:NandM
*Lines2..N+1:Linei+1describescharmiwithtwospace-separatedintegers:WiandDi
Output
*Line1:Asingleintegerthatisthegreatestsumofcharmdesirabilitiesthatcanbeachievedgiventheweightconstraints
SampleInput
46 14 26 312 27
SampleOutput
23 这个是简单的01背包从我开始接触到背包到现在我还是不懂背包的原理 开始背包的旅程 正常的背包是 i1....n jm....0 dp[i][j]=max(dp[i-1][j],dp[i-1][j-w[i]]+v[i]); 但是这个范围较大 如果用二维的会超内存 可以转化成一维的 dp[j]=max(dp[j],dp[j-w[i]]+v[i]);
#include<stdio.h> #include<string.h> #include<stdlib.h> #include<math.h> #include<algorithm> #include<iostream> usingnamespacestd; #defineN3500 intdp[13000]; intmain() { intn,m,w ,v ; while(scanf("%d%d",&n,&m)!=EOF) { for(inti=1;i<=n;i++) scanf("%d%d",&w[i],&v[i]); memset(dp,0,sizeof(dp)); for(inti=1;i<=n;i++) { for(intj=m;j>=0;j--) { if(j>=w[i]) dp[j]=max(dp[j],dp[j-w[i]]+v[i]); } } printf("%d\n",dp[m]); } return0; }
相关文章推荐
- Android中Service生命周期
- 修复win7和wubi装的ubuntu双系统引导
- PCA降维算法总结以及matlab实现PCA(个人的一点理解)
- Swift中的断言assert
- 小猪的数据结构辅助教程——2.4 线性表中的循环链表
- UVA10815 Andy's First Dictionary(STL)
- osc的git服务器简单使用。
- poj 1035 串
- Android-4-X界面开发那点事
- Linux用户空间与内核空间数据传递的几点理解和总结
- FLV科普4 FLV头信息解析
- select语句详解
- 结合框架的方法
- BZOJ2763, 最短路
- UVA—10817 Headmaster's Headache
- shopxx研究
- nginx location
- 使用9Patch图片作为背景
- Caffe 安装教程 (Mac OS)
- Cocoapods完整使用