BZOJ3107 CQOI2013二进制A+B(动态规划)
显然答案只与a、b、c中各自1的个数及位数有关。a、b只考虑前i位怎么填时,c最多在第i+1位上为1,而第i+1位及之后的a、b怎么填都不会对前i位造成影响。于是设f[n][i][j][k][0/1]表示只考虑前n位,a用i个1,b用j个1,c用k个1,且c的第n+1位为0/1时的最小值。转移时枚举下一位a和b各自填0还是1即可。注意230是有31位的,防止爆int。本来输出的时候是三目运算符的结果发现-1会输出成232-1。
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstdlib>
#include<cstring>
#include<algorithm>
using namespace std;
#define N 32
#define int unsigned int
#define inf ((1<<31)-1)
int read()
{
int x=,f=;char c=getchar();
while (c<''||c>'') {if (c=='-') f=-;c=getchar();}
while (c>=''&&c<='') x=(x<<)+(x<<)+(c^),c=getchar();
return x*f;
}
int a,b,c,n,f[N][N][N][N][];
inline void update(int &x,int y){x=min(x,y);}
signed main()
{
#ifndef ONLINE_JUDGE
freopen("bzoj3107.in","r",stdin);
freopen("bzoj3107.out","w",stdout);
const char LL[]="%I64d\n";
#else
const char LL[]="%lld\n";
#endif
a=read(),b=read(),c=read();
int t=,cnt=;
while (a) t++,cnt+=a&,a>>=;
n=max(n,t);a=cnt;
t=,cnt=;
while (b) t++,cnt+=b&,b>>=;
n=max(n,t);b=cnt;
t=,cnt=;
while (c) t++,cnt+=c&,c>>=;
n=max(n,t);c=cnt;
for (int i=;i<=n;i++)
for (int j=;j<=a;j++)
for (int k=;k<=b;k++)
for (int l=;l<=c;l++)
f[i][j][k][l][]=f[i][j][k][l][]=inf;
f[][][][][]=;
for (int i=;i<n;i++)
for (int j=;j<=min(a,i);j++)
for (int k=;k<=min(b,i);k++)
for (int l=;l<=min(c,i+);l++)
{
update(f[i+][j][k][l][],min(f[i][j][k][l][],f[i][j][k][l][]));
update(f[i+][j+][k][l+][],f[i][j][k][l][]+(<<i));
update(f[i+][j][k+][l+][],f[i][j][k][l][]+(<<i));
update(f[i+][j+][k][l][],f[i][j][k][l][]+(<<i));
update(f[i+][j][k+][l][],f[i][j][k][l][]+(<<i));
if (i+<n) update(f[i+][j+][k+][l+][],min(f[i][j][k][l][],f[i][j][k][l][])+(<<i+));
}
if (f[n][a][b][c][]==inf) cout<<-;
else cout<<f[n][a][b][c][];
return ;
}
BZOJ3107 CQOI2013二进制A+B(动态规划)的更多相关文章
- BZOJ 3107 [cqoi2013]二进制a+b (DP)
3107: [cqoi2013]二进制a+b Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 995 Solved: 444[Submit][Stat ...
- P4574 [CQOI2013]二进制A+B
传送门 思路: 本题可用数位DP来做,设 f [ i ][ a ][ b ][ c ][ j ] 表示当前枚举到(二进制下的)第i位,a' b' c'各用a,b,c了几个1,j表示最后一位是否有进位. ...
- bzoj AC倒序
Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...
- [文文殿下]基本的DP技巧
. 二进制状态压缩动态规划 对于某些情况,如果题目中所给的限制数目比较小,我们可以尝试状态压缩动态规划.例如,题目中给出数据范围\(n<=20\),这个一般情况下是一个状压DP的提示. 状态压缩 ...
- GitHub最强技术面试手册:Tech Interview Handbook
摘要: 求职还是需要认真准备的. 原文:超实用技术面试手册,从工作申请.面试考题再到优势谈判,GitHub获30000星 作者:量子位 技术人员求职面试,单刷leetcode上的大厂题库可能还不够. ...
- 动态规划——用二进制表示集合的状态压缩DP
动态规划当中有非常常见的一个分支--状态压缩动态规划,很多人对于状态压缩畏惧如虎,但其实并没有那么难,希望这文章能带你们学到这个经典的应用. 二进制表示状态 在讲解多重背包问题的时候,我们曾经讲过二进 ...
- 动态规划:HDU2844-Coins(多重背包的二进制优化)
Coins Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Subm ...
- 动态规划:HDU1059-Dividing(多重背包问题的二进制优化)
Dividing Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total S ...
- [HIHO1318]非法二进制(动态规划)
题目链接:http://hihocoder.com/problemset/problem/1318 题意:是个dp题.考虑二进制数为i位的时候,无非有两种情况:新添加的一位为0或者1. 为0的时候,那 ...
随机推荐
- Android启动问题——黑屏、死机等解决方法
今天用了下Android Studio,出现了一些问题,现在将启动过程中遇到的问题和解决方案列出来,方便大家参考. 安装过程不多说,网上一搜一大把. 那直接说问题吧: 1. 无法启动,报错:Faile ...
- SQL语句汇总(一)——数据库与表的操作以及创建约束
首先,非常感谢大家对上篇博文的支持,真是让本菜受宠若惊,同时对拖了这么久才出了此篇表示抱歉. 前言:此文旨在汇总从建立数据库到联接查询等绝大部分SQL语句.SQL语句虽不能说很多,但稍有时间不写就容易 ...
- Git积累
1.使用git config命令进行配置(此配置为全局配置,这些是在提交commit时的签名): $ git config --global user.name "填写github的用户名& ...
- 记一次eslint规则配置
{ // 环境定义了预定义的全局变量. "env": { //环境定义了预定义的全局变量.更多在官网查看 "browser": true, "node ...
- JUC——线程池
线程池本质的概念就是一堆线程一起完成一件事情. Executor package java.util.concurrent; public interface Executor { void exec ...
- netbeans 类重复 解决
Help -> About -> Cache directory 记录Cache directory目录 删除该目录下的所有文件 重启
- oracle存储过程 关于update的动态SQL-工作心得
本随笔文章,由个人博客(鸟不拉屎)转移至博客园 发布时间: 2018 年 12 月 20 日 原地址:https://niaobulashi.com/archives/oracle-procedure ...
- AI 启蒙-无人售货机智能找零算法
人的理想志向往往和他的能力成正比. --约翰逊-- AI 启蒙-无人售货机智能找零算法 [问题区] 你现在是一家无人售货机生产公司的高级程序员,技术经理叫你实现无人售货机智能找零钱的算法,具体需求 ...
- texlive2018和texstudio的安装及汉化教程
latex是编写论文的利器,尤其是公式的编辑是word等不可比的,且公式可以支持转换为Matgtype,十分方便且学习周期短. 下文是texlive2018和texstudio的安装教程: 本文转自: ...
- CentOS删除安装的程序
以mysql举例: 首先查询安装包: rpm -qa|grep mysql 查询到的一个结果为:mysql-community-libs-5.7.13-1.el6.x86_64 yum 删除 yum ...