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的时候,那 ...
随机推荐
- BootStap学习笔记(1)
移动设备优先: 为了让开发的网站对移动设备友好,确保适当的绘制和触屏缩放,需要在网页的head之中添加viewport meat标签:如下: <metaname="viewport& ...
- web测试通用要点大全(Web Application Testing Checklist)
在测试工作中经常遇到测试同一控件功能的情景,这样几年下来也积累了各种测试功能控件的checklist,过年期间抽空整理分享出来.通过下面的清单,任何测试新手都可以快速写出媲美工作好几年的测试老鸟的测试 ...
- python简单计时器实现
实现程序运行时间的显示与相互之间的计算: 实现代码: import time as t class Mytimer(): def __init__(self): self.unit=["年& ...
- birt 访问频繁报错Cannot create JDBC driver of class '' for connect URL 'null' java.sql.SQLException: No suitable driver
一般birt项目都是部署tomcat启动.这个问题大概率是因为没有配置JNDI数据源的原因. 参考链接: https://www.cnblogs.com/xdp-gacl/p/3951952.html
- 拦截器 应用详解--SpringMVC
在实际项目中,拦截器的使用是非常普遍的,例如在购物网站中通过拦截器可以拦截未登录的用户,禁止其购买商品,或者使用它来验证已登录用户是否有相应的操作权限等,Spring MVC提供了拦截器功能,通过配置 ...
- SSM搭项目报错:HTTP Status 400 – Bad Request
具体报错如下: Type Status Report Description The server cannot or will not process the request due to some ...
- MineCraft | 命令附魔
随时更 来一条命令: /give @p diamond_axe 1 0 {ench:[{id:16,lvl:32767},{id:17,lvl:32767},{id:18,lvl:32767}]} g ...
- Deep learning for visual understanding: A review 视觉理解中的深度学习:回顾 之一
Deep learning for visual understanding: A review 视觉理解中的深度学习:回顾 ABSTRACT: Deep learning algorithms ar ...
- 在虚拟机上搭建物理机可访问的web服务(IIS)
0x0 前言 安装webug4.0的时候突发奇想,想学下如何在虚拟机里搭建网站,然后让主机像访问互联网的网站一样访问虚拟机的网站,为以后渗透测试搭建环境做准备 0x1 虚拟机安装win2003[以防万 ...
- 作业 20181127-3 互评Beta版本
此作业要求参见:https://edu.cnblogs.com/campus/nenu/2018fall/homework/2448 组名:可以低头,但没必要 组长:付佳 组员:张俊余 李文涛 孙赛佳 ...