HDU 1059 Dividing
题意:有6种大理石(marble,怀疑是不是大理石的意思。。。几块大理石也值得争?!),每种若干件且每种大理石有一定的价值(分别为1,2,3,4,5,6)。问能否分成价值相等的两份。
分析:多重背包。价值和费用相同。注意初始化。以下有两种解法。。。
代码1(多重背包):
1 #include<iostream> 2 using namespace std; 3 4 int f[60005],num[7]; 5 int sum,half; 6 const int INF=0x3f3f3f3f; 7 8 int max(int a,int b){ 9 return a>b?a:b; 10 } 11 12 void ZeroOnePack(int c){ 13 int i; 14 for(i=half;i>=c;i--) 15 f[i]=max(f[i],f[i-c]+c); 16 } 17 18 void CompletePack(int c){ 19 int i; 20 for(i=c;i<=half;i++) 21 f[i]=max(f[i],f[i-c]+c); 22 } 23 24 int main() 25 { 26 //freopen("in.txt","r",stdin); 27 int i,j,k,cas=1; 28 while(1){ 29 for(i=1,sum=0;i<=6;i++){ 30 scanf("%d",&num[i]); 31 sum+=num[i]*i; 32 } 33 if(sum==0) break; 34 if(sum%2){ 35 printf("Collection #%d:\n",cas++); 36 printf("Can't be divided.\n\n"); 37 continue; 38 } 39 half=sum/2; 40 f[0]=0; 41 for(i=1;i<=half;i++) 42 f[i]=-INF; 43 for(i=k=1;i<=6;i++){ 44 if(i*num[i]>=half) 45 CompletePack(i); 46 else{ 47 while(k<num[i]){ 48 ZeroOnePack(k*i); 49 num[i]-=k; 50 k<<=1; 51 } 52 ZeroOnePack(num[i]*i); 53 } 54 } 55 printf("Collection #%d:\n",cas++); 56 if(f[half]==half) printf("Can be divided.\n\n"); 57 else printf("Can't be divided.\n\n"); 58 } 59 return 0; 60 }
代码2(可行性解法):
1 #include<iostream> 2 using namespace std; 3 4 int f[7][60005],num[7]; 5 int sum,half; 6 7 int max(int a,int b){ 8 return a>b?a:b; 9 } 10 11 int main() 12 { 13 //freopen("in.txt","r",stdin); 14 int i,j,cas=1; 15 while(1){ 16 for(i=1,sum=0;i<=6;i++){ 17 scanf("%d",&num[i]); 18 sum+=num[i]*i; 19 } 20 if(sum==0) break; 21 if(sum%2){ 22 printf("Collection #%d:\nCan't be divided.\n\n",cas++); 23 continue; 24 } 25 half=sum/2; 26 f[0][0]=0; 27 for(i=1;i<=half;i++) 28 f[0][i]=-1; 29 for(i=1;i<=6;i++){ 30 for(j=0;j<=half;j++) 31 if(f[i-1][j]>=0) 32 f[i][j]=num[i]; 33 else f[i][j]=-1; 34 for(j=0;j<=half-i;j++) 35 if(f[i][j]>0) 36 f[i][j+i]=max(f[i][j+i],f[i][j]-1); 37 } 38 printf("Collection #%d:\n",cas++); 39 if(f[6][half]>=0) printf("Can be divided.\n\n"); 40 else printf("Can't be divided.\n\n"); 41 } 42 return 0; 43 }
转载于:https://www.cnblogs.com/acmer-roney/archive/2013/03/04/2943593.html
HDU 1059 Dividing相关推荐
- (step3.3) hdu 1059(Dividing——多重背包)
题目大意:分别给出价值为1~6的石头的数量.问能否将这些石头等价值平分... 解题思路:多重背包 1)多重背包的典型描述是这样的:给出n种物品,背包的容量为V.每种物品的可用数量为num[i],所占体 ...
- HDU 1059 Dividing 多重背包
这题想了想用母函数应该也可以做,不过得考虑一个细节,就是加起来的总和是否为奇数,我找了好久一直没找出错误,原来是没考虑奇数.. fuck 这种问题我怎么能不考虑奇数呢..... 啊 啊 啊啊 啊 ...
- hdu 1059 Dividing(多重DP)
点击打开链接 题目意思: 有各种物品,各自的价值为1,2,3,4,5,6: 给出各自的数目,判断能否将其平分. 使用母函数的话,果断超时. 所以才用多重背包,这里需要剪枝一下了. #include&q ...
- 【HDU 1059】Dividing(多重背包)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1059 题意:有6种物品,价值分别是1,2,3,4,5,6,每种物品有n[ i ]个,,问是否能将其平分 ...
- Dividing(HDU 1059)(多重背包_二进制优化)
题目链接: 题意:有价值分别为1,2,3,4,5,6的marbles(大理石)若干,问是否能使这些marbles平分.[marbles总数不超过2e4(很明显这是一个大常数,所以用二进制优化来做)] ...
- 杭电OJ分类题目(3)
原题出处:HDOJ Problem Index by Type,http://acm.hdu.edu.cn/typeclass.php 杭电OJ分类题目(3) HDU Computational Ge ...
- dividing(多重背包)
E - Dividing HDU - 1059 有6种宝石,价值分别为1,2,3,4,5,6. 现在有一个长度为6的数组,第i个数字表示价值为i的宝石的数量. 例如:[1,0,1,2,0,0]表示有一 ...
- 杭电60道DP问题总结(一)
杭电60道DP问题总结: DP是一个很有艺术的思想.看似简单的背后却隐藏着深刻的含义. 题目连接地址:http://acm.hdu.edu.cn/problemclass.php?id=516& ...
- 动态规划总结与题目分类
源博客链接:http://blog.csdn.net/cc_again/article/details/25866971 动态规划一直是ACM竞赛中的重点,同时又是难点,因为该算法时间效率高,代码量少 ...
最新文章
- 分治——最近点对问题 hdu1007
- Dos批处理中符号作用大全
- 激光扫描仪的扫描方式
- 301转向和网址规范化
- python去重复的数据_Python中mysql查询重复数据并删除重复数据
- .NET Core加解密实战系列之——消息摘要与数字签名算法
- 使用QT的qmake工具生成VS工程
- go web框架_干货分享:六个知名的Go语言web框架
- 在Scala中评估val,var,lazy val和def构造时
- VC编程——QQ连连看外挂
- sit是什么环境_DEV SIT UAT PET SIM PRD PROD常见环境英文缩写含义
- WAV音乐文件无法修改标题
- oracle的month函数的使用方法,oracle next_day,add_month函数
- 做产品路线图规划用什么工具?
- android list嵌套list,Android开发日常-listVIiew嵌套webView回显阅读位置
- Respones请求重定向
- java百度天气接口解析_Java调用天气接口(百度天气)解析返回的JSON数据
- linux中test的用法,如何在Linux中使用test命令
- 软件工程课程作业--UON
- 无线打印服务器与什么打印机相配,网络打印服务器-本地打印机和网络打印机有什么区别? 爱问知识人...
热门文章
- golang获取结构体中的tag_26. Go 语言中结构体的 Tag 用法
- 【slighttpd】基于lighttpd架构的Server项目实战(5)—TCP的TIME_WAIT状态
- idea中war和war exploded的区别及修改jsp必须重新启动tomcat才能生效的问题(转)
- 删除数据文件—启动不了数据库--恢复数据库—启动数据库
- Maven 搭建多模块企业级项目
- AlphaGo技术剖析:揭开围棋大脑的神秘面纱
- Tomcat源码解析系列二:Tomcat总体架构
- Codeforces round 1098
- 第三方seo关键词优化工具推荐
- Python常见十六个错误集合,你知道那些?