传送门

    大意:

  有价值分别为1..6的大理石各a[1..6]块,现要将它们分成两部分,使得两部分价值之和相等,问是否可以实现。其中大理石的总数不超过20000。

 解题思路:

  妥妥的多重背包+二进制拆分,主要写一下二进制拆分存个档(儿时的噩梦)。

  总所周知,20,21,22,……2k-1从中挑选若干个相加可以得到0~2k-1中的任意数。那么将一个数s进行二进制拆分,首先要做的就是找到最大k满足2k-1<=s,设c=s-2k+1。显而易见20,21,……,2k-1,c可以从中挑选若干个数相加得到0~s中的任意数。这题要做优化就是从这个思路中来,拿价值为1的大理石举例,设有t1个价值为1的大理石,可以将t1拆分为20,21,22,……,2k-1,c,然后就可以将多重背包化为01背包去解决,每个数s可以化解出log(s)个,总复杂度o(nlogn)

  

#include<bits/stdc++.h>
using namespace std;
int num[][];
bool bk[];
int main()
{
int t[];
while(){
int sum=;
for(int i=;i<=;i++){
scanf("%d",&t[i]);
sum+=t[i]*i;
}
if(sum==) break;
if(sum&){
cout<<"Can't"<<endl;continue;
}
sum/=;for(int i=;i<=sum;i++) bk[i]=false;bk[]=true;
for(int i=;i<=;i++){
int t1=,t2=;
while(t[i]>=(<<t1)){
num[i][t1]=(<<t1);t1++;
}
if(t[i]-(<<t1)) num[i][t1++]=t[i]-(<<t1);
for(int j=;j<t1;j++){
for(int h=sum;h>=i*num[i][j];h--){
bk[h]|=bk[h-i*num[i][j]];
}
}
}
if(bk[sum]) cout<<"Can"<<endl;
else cout<<"Can't"<<endl;
}
}

CH5E07 划分大理石(背包dp+二进制拆分)的更多相关文章

  1. CH5E07 划分大理石【多重背包】

    5E07 划分大理石 0x5E「动态规划」练习描述有价值分别为1..6的大理石各a[1..6]块,现要将它们分成两部分,使得两部分价值之和相等,问是否可以实现.其中大理石的总数不超过20000. 输入 ...

  2. luogu||P1776||宝物筛选||多重背包||dp||二进制优化

    题目描述 终于,破解了千年的难题.小FF找到了王室的宝物室,里面堆满了无数价值连城的宝物……这下小FF可发财了,嘎嘎.但是这里的宝物实在是太多了,小FF的采集车似乎装不下那么多宝物.看来小FF只能含泪 ...

  3. hdu1059(背包dp二进制优化)

    Dividing Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Subm ...

  4. hdu 2844 coins(多重背包 二进制拆分法)

    Problem Description Whuacmers use coins.They have coins of value A1,A2,A3...An Silverland dollar. On ...

  5. [tyvj-1194]划分大理石 二进制优化多重背包

    突然发现这个自己还不会... 其实也不难,就和快速幂感觉很像,把物品数量二进制拆分一下,01背包即可 我是咸鱼 #include <cstdio> #include <cstring ...

  6. 2018.09.08 bzoj1531: [POI2005]Bank notes(二进制拆分优化背包)

    传送门 显然不能直接写多重背包. 这题可以用二进制拆分/单调队列优化(感觉二进制好写). 所谓二进制优化,就是把1~c[i]拆分成20,21,...2t,c[i]−2t+1+1" role= ...

  7. HDU1059 二进制拆分优化多重背包

    /*问你能不能将给出的资源平分成两半,那么我们就以一半为背包,运行多重背包模版 但是注意了,由于个数过大,直接运行会超时,所以要用二进制拆分每种的个数*/ #include<stdio.h> ...

  8. poj 1742 Coins(二进制拆分+bitset优化多重背包)

    \(Coins\) \(solution:\) 这道题很短,开门见山,很明显的告诉了读者这是一道多重背包.但是这道题的数据范围很不友好,它不允许我们直接将这一题当做01背包去做.于是我们得想一想优化. ...

  9. 背包dp相关

    0/1背包 给出n个物品,每个物品有Vi的价值和Wi的费用,我们总共有m块钱,求最多能得到多少价值的物品. N<=10^3,m<=10^3 记录方案数?记录输出方案? 输出方案: 对每个d ...

随机推荐

  1. Jupyter NoteBook 系列之 安装启动和常用设置

    介绍 Jupyter Notebook(此前被称为 IPython notebook)是一个交互式笔记本,目前支持运行 40 多种编程语言. Jupyter Notebook 的本质是一个 Web 应 ...

  2. Centos7安装Elasticsearch和Kibana

    这里使用的6.6.0版本,ES需要JDK环境,对应1.8 Elasticsearch安装: 1.下载:https://elasticsearch.cn/download/ 2.解压: 3.修改配置:j ...

  3. Github Pages访问太慢?通过Netlify免费加速

    github pages vs netlify Github Pages为Github提供的一项静态站点托管服务,它直接从Github仓库获取静态文件进行发布,然后提供一个github.io的二级域名 ...

  4. Journal of Proteome Research | Utilization of the Proteome Data Deposited in SRMAtlas for Validating the Existence of the Human Missing Proteins in GPM (解读人:梁嘉琪)

    文献名:Utilization of the Proteome Data Deposited in SRMAtlas for Validating the Existence of the Human ...

  5. mpy开发物联网系列:1.mpy与服务器数据库方案

    ini配置文件与非关系型数据库 在使用micropython开发esp32过程中,经常涉及到一些数据的配置读取,而esp32本身micropython难以安装很多数据库客户端的库,只能基于本地文件使用 ...

  6. 浅析二分搜索树的数据结构的实现(Java 实现)

    目录 树结构简介 二分搜索树的基础知识 二叉树的基本概念 二分搜索树的基本概念 二分搜索树的基本结构代码实现 二分搜索树的常见基本操作实现 添加操作 添加操作初步实现 添加操作改进 查询操作 遍历操作 ...

  7. ysoserial-C3P0 分析

    环境准备: pom: <!-- https://mvnrepository.com/artifact/com.mchange/c3p0 --> <dependency> < ...

  8. TensorFlow Windows 安装

    欢迎大家关注我们的网站和系列教程:http://www.tensorflownews.com/,学习更多的机器学习.深度学习的知识! 本系列教程将手把手带您从零开始学习Tensorflow,并最终通过 ...

  9. python3读取excel

    说明 2007版以前的Excel(xls结尾的),需要使用xlrd读,xlwt写. 2007版以后的Excel(xlsx结尾的),需要使用openpyxl来读写. pypi的地址: https://p ...

  10. SpringCloud服务的注册发现--------zookeeper实现服务与发现 + Ribbon实现客户端负载均衡

    1,Eureka 闭源了,但是我们可以通过zookeeper实现注册中心的功能. zookeeper 是一个分布式协调工具,可以实现服务的注册和发现,配置中心,注册中心,消息中间件的功能 2,工具准备 ...