Dividing 多重背包 倍增DP
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相关推荐
- POJ 1014 Dividing(多重背包 + 倍增优化)
题意: 求一种划分方案使结果最公平. 思路: 多重背包,然后把物品分为 2^0, 2^1, ... , 2^k,... 等. #include <iostream> #include &l ...
- (step3.3) hdu 1059(Dividing——多重背包)
题目大意:分别给出价值为1~6的石头的数量.问能否将这些石头等价值平分... 解题思路:多重背包 1)多重背包的典型描述是这样的:给出n种物品,背包的容量为V.每种物品的可用数量为num[i],所占体 ...
- HDU 1059 Dividing 多重背包
这题想了想用母函数应该也可以做,不过得考虑一个细节,就是加起来的总和是否为奇数,我找了好久一直没找出错误,原来是没考虑奇数.. fuck 这种问题我怎么能不考虑奇数呢..... 啊 啊 啊啊 啊 ...
- HDU 5445 Food Problem 两次多重背包
题目描述: Problem Description Few days before a game of orienteering, Bell came to a mathematician to so ...
- 欠债还钱、Codeforces Round #637 (Div. 2) -D(多重背包)
Description llk经常和wy一起去yh小饭馆吃盖浇饭,一天他们吃完后llk把两个人的钱一起付了,但是wy不想欠llk的钱.现在wy手中有一些散钱,llk手中也有一些散钱,wy想知道能不能刚 ...
- 01背包,完全背包,多重背包的个人总结
大一刚接触背包问题的时候就觉得绕.那时候真的是一点代码基础都没有强行去理解.每次都是以失败告终,一直到大二都还不会写背包问题. 后来某次模拟赛之后碰到了背包问题,觉得这个还是挺简单的,终于是下定决心准 ...
- 【POJ3260】The Fewest Coins 多重背包+完全背包
A来B处买东西,价值M元,有N种钱,每种钱A有一定数量,而B有无限数量. 求最少用多少张钞票可以满足交易,比如样例,A出50+25,B找5,即可满足,需要3张. A用多重背包转移状态,B用完全背包. ...
- 【POJ】 1014 Dividing(多重背包,优化)
[POJ] 1014 Dividing(多重背包,优化) [题目链接]http://poj.org/problem?id=1014 题目 Description Marsha and Bill own ...
- dividing(多重背包)
E - Dividing HDU - 1059 有6种宝石,价值分别为1,2,3,4,5,6. 现在有一个长度为6的数组,第i个数字表示价值为i的宝石的数量. 例如:[1,0,1,2,0,0]表示有一 ...
最新文章
- 人工智能的“天罗地网”
- FFmpeg再学习 -- 视音频基础知识
- c++常用知识点,易错点,面试常问点
- vlc-qt编译 linux,记录一次搞vlc官方源码中Qt示例工程的过程,文件路径对话框
- php实现tcp连接的原理,PHP实现TCP实例
- C#设计模式之0-简单工厂模式
- Romoting 通信DEMO(整理)
- [教程] 康盛创想 Windows (server 2003) 服务器部署标准 白丁简明版
- Apache服务停止:信号灯超时时间已到,指定的网络名不再可用
- 如何使用html制作网页
- 世界各国网络域名后缀
- Mathmatica的学习打卡day 16
- C语言随机比大小循环,C语言基础知识之(三):循环、随机数
- Kali linux安装步骤,史上最详细的步骤,傻瓜式教学
- android点击按钮发出声音
- omv检查硬盘坏道_技术员们有福了,关于怎么用MHDD修复硬盘坏道,现在免费给大家了!!!...
- 深入浅出Python机器学习9——数据预处理、降维、特征提取及聚类
- yolov5l.pt下载
- 【人工智能+区块链项目Cortex首尔举办韩国首场线下活动】
- tvs管参数数解读_TVS管的主要参数及选型总结