背包问题类型各题总结-acm(41页).doc
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《背包问题类型各题总结-acm(41页).doc》由会员分享,可在线阅读,更多相关《背包问题类型各题总结-acm(41页).doc(41页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、-背包问题类型各题总结-acm-第 41 页分组背包:Problem C: 超市购物Time Limit: 1 SecMemory Limit: 128 MBSUBMIT: 21Solved: 10SUBMITSTATUSDescription 上次去超市扫荡回来的东西用完了,Staginner又得跑超市一趟,出发前他列了一张购物清单,打算去买K种不同的商品,每种买一件。到了超市,Staginner发现每种商品有N个品牌,每个品牌此商品的价格为Vi,对Staginner的作用值为Wi,他会从这N个品牌里面挑一个品牌买。这时,Staginner突然想起出门时只带了M元钱,又懒得去取钱了,所以不一
2、定能买完K种商品,只好尽可能地让买的东西对自己的总作用值ans最大。Input多组样例。 第一行两个整数K,M代表Staginner想买的不同种类商品的数目和他带的钱 (0 K = 30, 0 M = 2000) 以下输入分为K个部分,代表K种商品。 每个部分第一行为一个数字N,代表第k种商品的N个品牌,N不大于10。之后跟着N行,每行两个数字,代表物品的价格Vi和作用值Wi。其中 0 Vi M。Output输出Case #: 最大总作用值,每两个样例之间有一个空行。Sample Input3 100350 60020 70030 800230 50040 600160 2002 500220
3、0 1000260 12001280 300Sample OutputCase 1: 1400Case 2: 1300HINT#include#includeint bag100100,dp2500,val100100;int main()int k,m,n,i,j,t,cnt=0;while(scanf(%d %d,&t,&m)!=EOF)memset(dp,0,sizeof(dp);memset(val,0,sizeof(val);memset(bag,0,sizeof(bag);for(i=0;it;i+) scanf(%d,&n); bagi0=n; for(j=1;j=n;j+) s
4、canf(%d %d,&bagij,&valij); for(i=0;i=0;j-) for(k=1;k=bagi0;+k) if(bagik(dpj-bagik+valik)?dpj:(dpj-bagik+valik); printf(Case %d: %dn,+cnt,dpm); printf(n);return 0;RobberiesTime Limit: 2000/1000 MS (Java/Others)Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 3802Accepted Submission(s): 1
5、433Problem DescriptionThe aspiring Roy the Robber has seen a lot of American movies, and knows that the bad guys usually gets caught in the end, often because they become too greedy. He has decided to work in the lucrative business of bank robbery only for a short while, before retiring to a comfort
6、able job at a university.For a few months now, Roy has been assessing the security of various banks and the amount of cash they hold. He wants to make a calculated risk, and grab as much money as possible.His mother, Ola, has decided upon a tolerable probability of getting caught. She feels that he
7、is safe enough if the banks he robs together give a probability less than this.InputThe first line of input gives T, the number of cases. For each scenario, the first line of input gives a floating point number P, the probability Roy needs to be below, and an integer N, the number of banks he has pl
8、ans for. Then follow N lines, where line j gives an integer Mj and a floating point number Pj . Bank j contains Mj millions, and the probability of getting caught from robbing it is Pj .OutputFor each test case, output a line with the maximum number of millions he can expect to get while the probabi
9、lity of getting caught is less than the limit set.Notes and Constraints0 T = 1000.0 = P = 1.00 N = 1000 Mj = 1000.0 = Pj = 1.0A bank goes bankrupt if it is robbed, and you may assume that all probabilities are independent as the police have very low funds.Sample Input30.04 30.06 30.10 3Sample Output
10、246题意:输入一个数 表示一共多少组数据 输入一个浮点型数表示小偷被抓的几率不超过这个情况下能偷的最多钱 输入一个整形表示多少个银行 输入3组数据 一组2个数 分别是该银行的钱 以及被抓的几率 求小偷不被抓的情况下能偷的最多钱思路: 一开始我是让几率当背包 然后钱做val 但是 这样是错误的 因为几率是浮点型 虽然可以*100变成整形 但是 几率是相乘得出的 而几率当背包无法模拟几率的相乘 由题中数据看 仿佛用几率当背包 然后几率相加 能得到样例中的结果 但是这是错误的思想几率哪有加的啊 所以就要变通一下 把钱当背包 看总共多少钱 把几率当背包 #include#includedouble
11、val105,x;int wei105;double bag10500000;void _01bag(int v,int m) int i,j; for(i=0;iv+3;i+) bagi=0; bag0=1; for(i=0;i=weii;j-) if(bagj=0;i-)if(bagi=1-x) printf(%dn,i);break; return;int main()int t,i,m,v; scanf(%d,&t);while(t-)v=0;scanf(%lf %d,&x,&m);for(i=0;im;i+)scanf(%d %lf,&weii,&vali);v=v+weii;_01
12、bag(v,m);return 0;I NEED A OFFER!Time Limit: 2000/1000 MS (Java/Others)Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 8472Accepted Submission(s): 3083Problem DescriptionSpeakless很早就想出国,现在他已经考完了所有需要的考试,准备了所有要准备的材料,于是,便需要去申请学校了。要申请国外的任何大学,你都要交纳一定的申请费用,这可是很惊人的。Speakless没有多少钱,总共只攒了n万美元。他将
13、在m个学校中选择若干的(当然要在他的经济承受范围内)。每个学校都有不同的申请费用a(万美元),并且Speakless估计了他得到这个学校offer的可能性b。不同学校之间是否得到offer不会互相影响。“I NEED A OFFER”,他大叫一声。帮帮这个可怜的人吧,帮助他计算一下,他可以收到至少一份offer的最大概率。(如果Speakless选择了多个学校,得到任意一个学校的offer都可以)。Input输入有若干组数据,每组数据的第一行有两个正整数n,m(0=n=10000,0=m=1000) 后面的m行,每行都有两个数据ai(整型),bi(实型)分别表示第i个学校的申请费用和可能拿到o
14、ffer的概率。 输入的最后有两个0。Output每组数据都对应一个输出,表示Speakless可能得到至少一份offer的最大概率。用百分数表示,精确到小数点后一位。Sample Input10 30 0Sample Output44.0%HintYou should use printf(%) to print a %.只要把大于号写成小于号就哦可了#includedouble bag10005;double val1005;int wei1005;double _01bag(int v,int m) int i,j; for(i=0;iv+3;i+) bagi=1.0; for(i=0;
15、i=weii;j-) if(bagjbagj-weii*vali) bagj=bagj-weii*vali; return bagv;int main() int n,m,i; double y; while(scanf(%d %d,&n,&m) if(m=0&n=0) break; for(i=0;im;i+) scanf(%d %lf,&weii,&y); vali=1-y; y=1-_01bag(n,m); y=y*100; printf(%.1lf%n,y); return 0; 多重背包 hdu2191Input输入数据首先包含一个正整数C,表示有C组测试用例,每组测试用例的第一行是
16、两个整数n和m(1=n=100, 1=m=100),分别表示经费的金额和大米的种类,然后是m行数据,每行包含3个数p,h和c(1=p=20,1=h=200,1=c=20),分别表示每袋的价格、每袋的重量以及对应种类大米的袋数。Output对于每组测试数据,请输出能够购买大米的最多重量,你可以假设经费买不光所有的大米,并且经费你可以不用完。每个实例的输出占一行。Sample Input18 22 100 44 100 2Sample Output400Authorlcy#include#includeint val5000,wei5000;int n;int bag105;int _01bag(
17、int m) int i,j; memset(bag,0,sizeof(bag); for(i=0;i=vali;j-) if(bagjbagj-vali+weii) bagj=bagj-vali+weii; return bagn;int main() int m,t,i,j,ge,temp,v,w; scanf(%d,&t); while(t-) scanf(%d %d,&n,&m); j=0; for(i=0;itemp)/二进制优化 valj=temp*v; weij+=temp*w; ge=ge-temp; temp=temp*2; valj=ge*v; weij+=ge*w; pr
18、intf(%dn,_01bag(j); return 0;二维背包hdu2159很重要啊FATETime Limit: 2000/1000 MS (Java/Others)Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 3051Accepted Submission(s): 1297Problem Description最近xhd正在玩一款叫做FATE的游戏,为了得到极品装备,xhd在不停的杀怪做任务。久而久之xhd开始对杀怪产生的厌恶感,但又不得不通过杀怪来升完这最后一级。现在的问题是,xhd升掉最后一级还需n的经验
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 背包 问题 类型 总结 acm 41
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内