hdu1059&poj1014 Dividing (dp,多重背包的二分优化)
Unfortunately, they realize that it might be impossible to divide the
marbles in this way (even if the total value of all marbles is even).
For example, if there are one marble of value 1, one of value 3 and two
of value 4, then they cannot be split into sets
of equal value. So, they ask you to write a program that checks whether
there is a fair partition of the marbles.
collection of marbles to be divided. The lines consist of six
non-negative integers n1, n2, ..., n6, where ni is the number of marbles
of value i. So, the example from above would be described
by the input-line ``1 0 1 2 0 0''. The maximum total number of marbles
will be 20000.
The last line of the input file will be ``0 0 0 0 0 0''; do not process this line.
``Collection #k:'', where k is the number of the test case, and then
either ``Can be divided.'' or ``Can't be divided.''.
Output a blank line after each test case.
#include <bits/stdc++.h> using namespace std;
int num[],sum,v,cnt,i,j;
bool dp[];//dp[i]表示容量为i的背包能否装满
int main()
{
//freopen("de.txt","r",stdin);
int casenum=;
while ()
{
memset(dp,,sizeof dp);
memset(num,,sizeof num);
sum=;
for (i=;i<=;++i)
{
scanf("%d",&num[i]);
sum+=i*num[i];
}
if (sum==)
break;
printf("Collection #%d:\n",casenum++);
if (sum%)//如果所有石头总价值和为奇数肯定不能均分
{
printf("Can't be divided.\n\n");
continue;
}
else
{
v=sum/;//用总价值的一半来作为背包的容量
dp[]=;
for (i=;i<=;++i)
{
if (num[i]==)
continue;
for (j=;j<=num[i];j*=)//j来作为2^n的单位
{
cnt=i*j;
for (int k=v;k>=cnt;--k)
{
if (dp[k-cnt])//只有k-cnt的背包被装满,k的背包才能被装满
dp[k]=;
}
num[i]-=j;//分完2^n剩下的个数
}
cnt=num[i]*i;
if (cnt)
{
for (int k=v;k>=cnt;--k)
{
if (dp[k-cnt])
dp[k]=;
}
}
}
if (dp[v])//容量为v的背包能否被装满
printf("Can be divided.\n\n");
else
printf("Can't be divided.\n\n");
}
}
return ;
}
hdu1059&poj1014 Dividing (dp,多重背包的二分优化)的更多相关文章
- HDOJ(HDU).1059 Dividing(DP 多重背包+二进制优化)
HDOJ(HDU).1059 Dividing(DP 多重背包+二进制优化) 题意分析 给出一系列的石头的数量,然后问石头能否被平分成为价值相等的2份.首先可以确定的是如果石头的价值总和为奇数的话,那 ...
- 硬币问题 (dp,多重背包的二分优化)
题目描述 给你n种硬币,知道每种的面值Ai和每种的数量Ci.问能凑出多少种不大于m的面值. 输入 有多组数据,每一组第一行有两个整数 n(1≤n≤100)和m(m≤100000),第二行有2n个整数, ...
- poj1014 Dividing (多重背包)
转载请注明出处:http://blog.csdn.net/u012860063 题目链接:id=1014">http://poj.org/problem?id=1014 Descrip ...
- CodeForces922E DP//多重背包的二进制优化
https://cn.vjudge.net/problem/1365218/origin 题意 一条直线上有n棵树 每棵树上有ci只鸟 在一棵树底下召唤一只鸟的魔法代价是costi 每召唤一只鸟,魔法 ...
- POJ1014:Dividing(多重背包)
http://poj.org/problem?id=1014 Description Marsha and Bill own a collection of marbles. They want to ...
- HDOJ(HDU).2844 Coins (DP 多重背包+二进制优化)
HDOJ(HDU).2844 Coins (DP 多重背包+二进制优化) 题意分析 先把每种硬币按照二进制拆分好,然后做01背包即可.需要注意的是本题只需要求解可以凑出几种金钱的价格,而不需要输出种数 ...
- HDOJ(HDU).2191. 悼念512汶川大地震遇难同胞――珍惜现在,感恩生活 (DP 多重背包+二进制优化)
HDOJ(HDU).2191. 悼念512汶川大地震遇难同胞――珍惜现在,感恩生活 (DP 多重背包+二进制优化) 题意分析 首先C表示测试数据的组数,然后给出经费的金额和大米的种类.接着是每袋大米的 ...
- HDU 1059(多重背包加二进制优化)
http://acm.hdu.edu.cn/showproblem.php?pid=1059 Dividing Time Limit: 2000/1000 MS (Java/Others) Me ...
- 动态规划:HDU2844-Coins(多重背包的二进制优化)
Coins Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Subm ...
随机推荐
- Redis缓存在django中的配置
django settings中的配置 # 缓存 CACHES = { "default": { "BACKEND": "django_redis. ...
- pyCharm和解释器下载安装
参考:(mac) 安装流程和注意: http://blog.csdn.net/limin2928/article/details/69267184 解释器下载地址: https://www.pytho ...
- APICloud框架——总结一下最近开发APP遇到的一些问题 (三)
ajax报错 Uncaught DOMException: Failed to execute 'send' on 'XMLHttpRequest': Failed to load 需要在服务器环境下 ...
- iOS设计模式之工厂模式
一,什么是工厂模式 模式定义: “专门定义一个类来负责创建其他类的实例,被创建的实例通常具有共同的父类.” 世界上就是由一个工厂类,根据传入的参数,动态地决定创建出哪一个产品类的实例. 需求场景: 简 ...
- java 节点流(字符流,字节流)和包装流(缓冲流,转换流)
结点流:直接对File类进行操作的文件流 package stream; import java.io.File; import java.io.FileNotFoundException; impo ...
- myeclipse2017使用总结
1.之前的myeclipse 2010项目导入后,需要配置项目发布内容,否则class.lib.web.xml等文件不会自动发布到tomcat中:
- (64)C# 预处理器指令
预处理器命令从来不会被翻译为可执行代码中的命令,但会影响编译过程的各个方面.例如:使用预处理器指令可以禁止编译器编译代码的某一部分,如果计划发布两个版本的代码,即基本版本和有更多功能的企业版本,即可以 ...
- Cygwin访问windows磁盘目录
http://blog.csdn.net/duguduchong/article/details/7680650 Cygwin访问windows磁盘目录 标签: windows磁盘user平台c 2 ...
- SSDT and Shadow SSDT table
参考:http://x86.renejeschke.de/html/file_module_x86_id_313.html http://msdn.microsoft.com/en-us/librar ...
- 记录规则(recording rules)与告警规则(alerting rule)
记录规则(recording rules) 配置规则 Prometheus支持两种类型的规则,可以对其进行配置,然后定期进行评估:记录规则和警报规则.要在Prometheus中包含规则,请创建一个包含 ...