zoj 1149 Dividing
1到6的卡分别各有有限制的张数,问能不能恰好分,总张数不能超过20000.
很明显是多重背包问题,上去果写了个三重循环,然后就T了,重新打开背包九讲,找到了多重背包的二进制拆分优化,把其中一维n的复杂度简化为logn的复杂度。
二进制拆分优化:就是1,2,4,2^k(满足和小于分解数最大的k),二进制优化可行的原因,因为可以用二进制数表示任意不同小于等于k的数。
注意:数组不要开小,RE了
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<map>
#include<iostream>
#include<vector>
#include<cstring>
#include<queue>
#include<string>
using namespace std;
int a[7];
int dp[60005];
int sum=0;
int num[60006];
int kk;
void bin(int n,int k) //多重背包的二进制拆分
{
int i,x;
for(i=0; ; i++)
{
x = 1<<i;
if(k<x)
break;
k-=x;
num[kk++] = x*n;
}
if( k != 0 )
num[kk++] = n*k;
}
int main()
{
// freopen("input.txt","r",stdin);
int cas=1;
while(1)
{
memset(num,0,sizeof(num));
memset(dp,0,sizeof(dp));
kk=0;
sum=0;
for(int i=1;i<7;i++)
{
scanf("%d",&a[i]);
sum+=a[i]*i;
bin(i,a[i]);
}
if(!sum)
break;
printf("Collection #%d:\n",cas++);
if(sum%2==1)
{
printf("Can't be divided.\n\n");
continue;
}
sum/=2;
// printf("%d\n",kk);
for(int i=0;i<kk;i++)//01
for(int k=sum;k>=num[i];k--)
{
dp[k]=max(dp[k],dp[k-num[i]]+num[i]);
}
if(dp[sum]==sum)
{
printf("Can be divided.\n\n");
}
else
{
printf("Can't be divided.\n\n");
}
}
}
zoj 1149 Dividing的更多相关文章
- Hdu 1059 Dividing & Zoj 1149 & poj 1014 Dividing(多重背包)
多重背包模板- #include <stdio.h> #include <string.h> int a[7]; int f[100005]; int v, k; void Z ...
- POJ题目细究
acm之pku题目分类 对ACM有兴趣的同学们可以看看 DP: 1011 NTA 简单题 1013 Great Equipment 简单题 102 ...
- 【转】POJ百道水题列表
以下是poj百道水题,新手可以考虑从这里刷起 搜索1002 Fire Net1004 Anagrams by Stack1005 Jugs1008 Gnome Tetravex1091 Knight ...
- Dividing a Chocolate(zoj 2705)
Dividing a Chocolate zoj 2705 递推,找规律的题目: 具体思路见:http://blog.csdn.net/u010770930/article/details/97693 ...
- ZOJ题目分类
ZOJ题目分类初学者题: 1001 1037 1048 1049 1051 1067 1115 1151 1201 1205 1216 1240 1241 1242 1251 1292 1331 13 ...
- 【转载】图论 500题——主要为hdu/poj/zoj
转自——http://blog.csdn.net/qwe20060514/article/details/8112550 =============================以下是最小生成树+并 ...
- ZOJ People Counting
第十三届浙江省大学生程序设计竞赛 I 题, 一道模拟题. ZOJ 3944http://www.icpc.moe/onlinejudge/showProblem.do?problemCode=394 ...
- ZOJ 3686 A Simple Tree Problem
A Simple Tree Problem Time Limit: 3 Seconds Memory Limit: 65536 KB Given a rooted tree, each no ...
- ZOJ Problem Set - 1394 Polar Explorer
这道题目还是简单的,但是自己WA了好几次,总结下: 1.对输入的总结,加上上次ZOJ Problem Set - 1334 Basically Speaking ac代码及总结这道题目的总结 题目要求 ...
随机推荐
- 浅谈postMessage多页面监听事件
最近做了一个Echarts和Highcharts多图多页面连动的效果,就用到postMessage 如下介绍: 最开始在最外围的页面也就是所有页面的父级页面添加postMessage监听事件以便监听下 ...
- OS X EI Capitan 安装mysql-5.7.9
先去下载mysql-5.7.9-osx10.9-x86_64.dmg安装(一直下一步,输入密码即可)mysql-5.7.9-osx10.9-x86_64.pkg好了,启动MySQL服务. Untitl ...
- javascript动态创建对象
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- Xcode中插件的安装以及Xcode升级后插件实效的解决方法
插件的安装 下载好插件,直接运行,然后将Xcode关闭,再次打开Xcode会弹出一个提醒框. 这时候选择 Load Bundle 即可,这时候插件就安装到了Xcode上. Xcode所有的插件都安装在 ...
- div背景等比例缩小
background: url("http://www.asdear.com/Content/loginPage/newimages/nchina.png") 50% 0px no ...
- Thinking In Java读书笔记--对象导论
Thinking In Java读书笔记--对象导论[对象]服务提供者==>将对象看做一个服务提供者[程序员分类][类创造者]/[客户端程序员] [访问控制存在的原因?][1]客户端程序员无法触 ...
- Http 信息头
Http协议定义了很多与服务器交互的方法,最基本的有4种,分别是GET.POST.PUT.DELETE.一个URL地址用于描述一个网络上的资源,而HTTP中的GET.POST.PUT. DELETE就 ...
- ACboy needs your help again!--hdu1702
ACboy needs your help again! Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K ( ...
- UIDatePicker控件
UIDatePicker继承关系如下: UIDatePicker-->UIControl-->UIView-->UIResponder-->NSObject 1.创建UIDat ...
- Oracle EBS-SQL (QA-3):检查已检验未入库.sql
DEFINE RECE="%" SELECT rsh.receipt_num 收据号, ...