Dividing

给出n个物品的价值和数量,问是否能够平分。

 1 #include <iostream>
 2 #include <cstring>
 3 #include <cmath>
 4 #include <cstdio>
 5 #include <algorithm>
 6 #include <vector>
 7 #include <string>
 8 #include <map>
 9 #include <set>
10 #include <stack>
11 #include <queue>
12 #include <sstream>
13 #include <iomanip>
14 using namespace std;
15 typedef long long LL;
16 const int INF=0x4fffffff;
17 const double EXP=1e-5;
18 const int MS=100005;
19 const int SIZE=1000005;
20
21 int cnt[MS];
22 int kase;
23 int dp[MS];
24
25 void solve()
26 {
27     int sum=cnt[0]*1+cnt[1]*2+cnt[2]*3+cnt[3]*4+cnt[4]*5+cnt[5]*6;
28     memset(dp,0,sizeof(dp));
29     dp[0]=1;
30     if((sum&1)==0)
31     {
32         for(int i=0;i<6;i++)
33         {
34             int num=cnt[i];
35             if(num==0)
36                 continue;
37             for(int k=1;num>0;k<<=1)
38             {
39                 int mul=min(k,num);
40                 for(int j=sum/2;j>=mul*(i+1);j--)
41                     dp[j]|=dp[j-mul*(i+1)];
42                     //dp[j]=max(dp[j],dp[j-mul*w[i]]+v[i]*mul);
43                 num-=mul;
44             }
45
46         }
47     }
48     printf("Collection #%d:\n",kase++);
49     if((sum&1)==0&&dp[sum/2])
50         printf("Can be divided.\n");
51     else
52         printf("Can't be divided.\n");
53     printf("\n");
54 }
55
56 int main()
57 {
58     kase=1;
59     while(scanf("%d%d%d%d%d%d",&cnt[0],&cnt[1],&cnt[2],&cnt[3],&cnt[4],&cnt[5]))
60     {
61         if(cnt[0]+cnt[1]+cnt[2]+cnt[3]+cnt[4]+cnt[5]==0)
62             break;
63         solve();
64     }
65     return 0;
66 }

转载于:https://www.cnblogs.com/767355675hutaishi/p/4415397.html

Dividing 多重背包 倍增DP相关推荐

  1. POJ 1014 Dividing(多重背包 + 倍增优化)

    题意: 求一种划分方案使结果最公平. 思路: 多重背包,然后把物品分为 2^0, 2^1, ... , 2^k,... 等. #include <iostream> #include &l ...

  2. (step3.3) hdu 1059(Dividing——多重背包)

    题目大意:分别给出价值为1~6的石头的数量.问能否将这些石头等价值平分... 解题思路:多重背包 1)多重背包的典型描述是这样的:给出n种物品,背包的容量为V.每种物品的可用数量为num[i],所占体 ...

  3. HDU 1059 Dividing 多重背包

    这题想了想用母函数应该也可以做,不过得考虑一个细节,就是加起来的总和是否为奇数,我找了好久一直没找出错误,原来是没考虑奇数..  fuck  这种问题我怎么能不考虑奇数呢.....  啊 啊 啊啊 啊 ...

  4. HDU 5445 Food Problem 两次多重背包

    题目描述: Problem Description Few days before a game of orienteering, Bell came to a mathematician to so ...

  5. 欠债还钱、Codeforces Round #637 (Div. 2) -D(多重背包)

    Description llk经常和wy一起去yh小饭馆吃盖浇饭,一天他们吃完后llk把两个人的钱一起付了,但是wy不想欠llk的钱.现在wy手中有一些散钱,llk手中也有一些散钱,wy想知道能不能刚 ...

  6. 01背包,完全背包,多重背包的个人总结

    大一刚接触背包问题的时候就觉得绕.那时候真的是一点代码基础都没有强行去理解.每次都是以失败告终,一直到大二都还不会写背包问题. 后来某次模拟赛之后碰到了背包问题,觉得这个还是挺简单的,终于是下定决心准 ...

  7. 【POJ3260】The Fewest Coins 多重背包+完全背包

    A来B处买东西,价值M元,有N种钱,每种钱A有一定数量,而B有无限数量. 求最少用多少张钞票可以满足交易,比如样例,A出50+25,B找5,即可满足,需要3张. A用多重背包转移状态,B用完全背包. ...

  8. 【POJ】 1014 Dividing(多重背包,优化)

    [POJ] 1014 Dividing(多重背包,优化) [题目链接]http://poj.org/problem?id=1014 题目 Description Marsha and Bill own ...

  9. dividing(多重背包)

    E - Dividing HDU - 1059 有6种宝石,价值分别为1,2,3,4,5,6. 现在有一个长度为6的数组,第i个数字表示价值为i的宝石的数量. 例如:[1,0,1,2,0,0]表示有一 ...

最新文章

  1. 人工智能的“天罗地网”
  2. FFmpeg再学习 -- 视音频基础知识
  3. c++常用知识点,易错点,面试常问点
  4. vlc-qt编译 linux,记录一次搞vlc官方源码中Qt示例工程的过程,文件路径对话框
  5. php实现tcp连接的原理,PHP实现TCP实例
  6. C#设计模式之0-简单工厂模式
  7. Romoting 通信DEMO(整理)
  8. [教程] 康盛创想 Windows (server 2003) 服务器部署标准 白丁简明版
  9. Apache服务停止:信号灯超时时间已到,指定的网络名不再可用
  10. 如何使用html制作网页
  11. 世界各国网络域名后缀
  12. Mathmatica的学习打卡day 16
  13. C语言随机比大小循环,C语言基础知识之(三):循环、随机数
  14. Kali linux安装步骤,史上最详细的步骤,傻瓜式教学
  15. android点击按钮发出声音
  16. omv检查硬盘坏道_技术员们有福了,关于怎么用MHDD修复硬盘坏道,现在免费给大家了!!!...
  17. 深入浅出Python机器学习9——数据预处理、降维、特征提取及聚类
  18. yolov5l.pt下载
  19. 【人工智能+区块链项目Cortex首尔举办韩国首场线下活动】
  20. tvs管参数数解读_TVS管的主要参数及选型总结

热门文章

  1. Spring的Autowired自动装配(XML版本+Annotation版本+源码+解析)
  2. spring+quartz 完整例子
  3. JBI与SCA的区别
  4. hibernate 联合主键 merge
  5. 使用IDEA创建一个Servlet应用程序
  6. Selenium Webdriver概述(转)
  7. 剑指offer-11.数值的整数次方实现power
  8. python数据类型基础与解压缩
  9. 类的继承私有成员问题
  10. 非常不错的MySQL优化的8条经验