hdu 1059 多重背包
- #include<stdio.h>
- #include<string.h>
- #include<algorithm>
- #include<iostream>
- using namespace std;
- int dp[];
- int a[];
- int nValue;
- //0-1背包,代价为cost,获得的价值为weight
- void ZeroOnePack(int cost,int weight)
- {
- for(int i=nValue;i>=cost;i--)
- dp[i]=max(dp[i],dp[i-cost]+weight);
- }
- //完全背包,代价为cost,获得的价值为weight
- void CompletePack(int cost,int weight)
- {
- for(int i=cost;i<=nValue;i++)
- dp[i]=max(dp[i],dp[i-cost]+weight);
- }
- //多重背包
- void MultiplePack(int cost,int weight,int amount)
- {
- if(cost*amount>=nValue) CompletePack(cost,weight);
- else
- {
- int k=;
- while(k<amount)
- {
- ZeroOnePack(k*cost,k*weight);
- amount-=k;
- k<<=;
- }
- ZeroOnePack(amount*cost,amount*weight);//这个不要忘记了,经常掉了
- }
- }
- int main()
- {
- int iCase=;
- while()
- {
- iCase++;
- int tol=;
- for(int i=;i<=;i++)
- {
- scanf("%d",&a[i]);
- tol+=i*a[i];
- }
- if(tol==)break;
- printf("Collection #%d:\n",iCase);
- if(tol%!=)
- {
- printf("Can't be divided.\n\n");
- continue;
- }
- else
- {
- nValue=tol/;
- }
- memset(dp,,sizeof(dp));
- for(int i=;i<=;i++)
- MultiplePack(i,i,a[i]);
- if(dp[nValue]==nValue)printf("Can be divided.\n\n");
- else printf("Can't be divided.\n\n");
- }
- return ;
- }
hdu 1059 多重背包的更多相关文章
- hdu 1059 (多重背包) Dividing
这里;http://acm.hdu.edu.cn/showproblem.php?pid=1059 题意是有价值分别为1,2,3,4,5,6的商品各若干个,给出每种商品的数量,问是否能够分成价值相等的 ...
- Dividing (hdu 1059 多重背包)
Dividing Sample Input 1 0 1 2 0 0 价值为1,2,3,4,5,6的物品数目分别为 1 0 1 2 0 0,求能否将这些物品按价值分为两堆,转化为多重背包.1 0 0 0 ...
- hdu 1059 多重背包 背包指数分块
思路: 这个方法要看<浅谈几类背包问题>这篇论文. #include"stdio.h" #define Max(a,b) (a)>(b)?(a):(b) ],k[ ...
- hdu 5445 多重背包
Food Problem Time Limit: 3000/2000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others)To ...
- hdu 2191 多重背包 悼念512汶川大地震遇难同胞——珍惜现在,感恩生活
http://acm.hdu.edu.cn/showproblem.php?pid=2191 New~ 欢迎“热爱编程”的高考少年——报考杭州电子科技大学计算机学院关于2015年杭电ACM暑期集训队的 ...
- Big Event in HDU(HDU 1171 多重背包)
Big Event in HDU Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others ...
- HDU 1171 Big Event in HDU (多重背包)
Big Event in HDU Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others ...
- HDU1171--Big Event in HDU(多重背包)
Big Event in HDU Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) ...
- Big Event in HDU(多重背包套用模板)
http://acm.hdu.edu.cn/showproblem.php?pid=1171 Big Event in HDU Time Limit: 10000/5000 MS (Java/Othe ...
随机推荐
- Ward BRDF实现心得
最近做了Ward BRDF的实现,相对于之前的lambert,phong来说,Ward是一个真正意义上的各向异性BRDF,但同样的,Ward模型也是一个基于经验的模型,并不是物理上正确的.它由ward ...
- 安装hadoop2.4.0遇到的问题
一.执行start-dfs.sh后,datenode没有启动 查看日志如下: 2014-06-18 20:34:59,622 FATAL org.apache.hadoop.hdfs.server.d ...
- web后门排查与高效分析web日志技巧
今年一直大大小小的事情忙,很少有时间能静下心写个文章,所以最近博客更新也越来越少了,公司现在安全团队在我这边,一直在玩命的招人.下个月8号有一个互联网金融的会,4月在qcon北京站,都以嘉宾的身份去分 ...
- ubuntu安装wiz笔记
wiz笔记支持跨平台 下面记录一下如何在ubuntu下面安装wiz笔记 1,ubuntu默认是没有wiz资源的,需要先添加官方ppa软件仓库 sudo add-apt-repository ppa:w ...
- C#路径总结
[相对路径] Request.ApplicationPath /src Path.GetDirectoryName(HttpContext.Current.Request.RawUrl ) //s ...
- JVM是如何分配和回收内存?有实例!
上一篇博客我简单介绍了下如何手动计算一个Java对象到底占用多少内存?今天就想聊下这个内存JVM到底是是如何分配和回收的. Java整体来说还是一个GC比较友好的语言,无论是分代的垃圾收集,还是基于G ...
- SQL Server2008ldf文件太大
--适用于SQL Server 2008的方法 USE [master] GO ALTER DATABASE RmyyHisDW SET RECOVERY SIMPLE WITH NO_WAIT GO ...
- zstu.4022.旋转数阵(模拟)
旋转数阵 Time Limit: 1 Sec Memory Limit: 64 MB Submit: 1477 Solved: 102 Description 把1到n2的正整数从左上角开始由外层 ...
- 1009: josephus问题
1009: josephus问题 Time Limit: 1 Sec Memory Limit: 64 MBSubmit: 549 Solved: 227 Description josephus ...
- [Effective JavaScript 笔记] 第11条:熟练掌握闭包
理解闭包三个基本的事实 第一个事实:js允许你引用在当前函数以外定义的变量. function makeSandwich(){ var magicIngredient=”peanut butter”; ...