Time:2016.08.24
Author:xiaoyimi
转载注明出处谢谢


传送门
思路:
今天的模拟题之一,现场脑补出的奥妙重重的DP思路
f[i][j][k][l][0/1]f[i][j][k][l][0/1]表示DP到了第i位
此时X有j个1,Y有k个1,Z有l个1
i+1位是0还是1
f[i][j][k][l][0]−>⎧⎩⎨⎪⎪⎪⎪⎪⎪f[i+1][j+1][k+1][l+1][1]f[i+1][j+1][k][l+1][0]f[i+1][j][k+1][l+1][0]f[i+1][j][k][l][0]f[i][j][k][l][0] -> \begin{cases} f[i+1][j+1][k+1][l+1][1]\\ f[i+1][j+1][k][l+1][0]\\ f[i+1][j][k+1][l+1][0]\\ f[i+1][j][k][l][0] \end{cases}

f[i][j][k][l][1]−>⎧⎩⎨⎪⎪⎪⎪⎪⎪f[i+1][j+1][k+1][l+1][1]f[i+1][j][k+1][l][1]f[i+1][j+1][k][l][1]f[i+1][j][k][l][0]f[i][j][k][l][1]-> \begin{cases} f[i+1][j+1][k+1][l+1][1]\\ f[i+1][j][k+1][l][1]\\ f[i+1][j+1][k][l][1]\\ f[i+1][j][k][l][0] \end{cases}
答案就是f[n][a的1个数][b的1个数][c的1个数][0]f[n][a的1个数][b的1个数][c的1个数][0]
转移复杂度为O(log42n)O(log^4_2n)常数略大
注意:要开一些奥妙重重的longlong
联动Shallwe的O(log2n)O(log_2n)构造法
折越
代码:

#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
#include<cmath>
#define LL long long
using namespace std;
int T,a,b,c;
LL f[33][33][33][33][2];
int cal(int x)
{int sum=0;for (;x;x>>=1)sum+=x&1;return sum;
}
void work()
{scanf("%d%d%d",&a,&b,&c);memset(f,127,sizeof(f));int n=max((int)log2(a)+1,(int)log2(b)+1);n=max(n,(int)log2(c)+1);int la=cal(a),lb=cal(b),lc=cal(c);f[0][0][0][0][0]=0;for (int i=0;i<n;++i)for (int j=0;j<=la;++j)for (int k=0;k<=lb;++k)for (int l=0;l<=lc;++l){LL tmp=f[i][j][k][l][0];f[i+1][j+1][k+1][l+1][1]=min(f[i+1][j+1][k+1][l+1][1],tmp+(1<<i+1));f[i+1][j+1][k][l+1][0]=min(f[i+1][j+1][k][l+1][0],tmp+(1<<i));f[i+1][j][k+1][l+1][0]=min(f[i+1][j][k+1][l+1][0],tmp+(1<<i));f[i+1][j][k][l][0]=min(f[i+1][j][k][l][0],tmp);tmp=f[i][j][k][l][1];f[i+1][j+1][k+1][l+1][1]=min(f[i+1][j+1][k+1][l+1][1],tmp+(1<<i+1));f[i+1][j][k+1][l][1]=min(f[i+1][j][k+1][l][1],tmp+(1<<i));f[i+1][j+1][k][l][1]=min(f[i+1][j+1][k][l][1],tmp+(1<<i));f[i+1][j][k][l][0]=min(f[i+1][j][k][l][0],tmp);}printf("%lld\n",f[n][la][lb][lc][0]>=(1LL<<31)-1?-1:f[n][la][lb][lc][0]);
}
main(){work();}

【BZOJ3107】二进制a+b,DP相关推荐

  1. Leetcode 526.优美的排列 二进制状压DP

    题目链接:传送门 假设有从 1 到 N 的 N 个整数,如果从这 N 个数字中成功构造出一个数组,使得数组的第 i 位 (1 <= i <= N) 满足如下两个条件中的一个,我们就称这个数 ...

  2. 数位dp ---- 暴力 + 二进制的数位dp 2020济南 L Bit Sequence

    题目链接 题目大意 f(x)=x的二进制中1的个数f(x)=x的二进制中1的个数f(x)=x的二进制中1的个数 给你一个数组[a1,a2,a3...,am]m∈[1,100][a_1,a_2,a_3. ...

  3. 牛客网 德玛西亚万岁 状压DP

    德玛西亚万岁 德玛西亚是一个实力雄厚.奉公守法的国家,有着功勋卓著的光荣军史.这里非常重视正义.荣耀.职责的意识形态,这里的人民为此感到强烈自豪.有一天他们想去制裁邪恶的比尔吉沃特,于是派遣了自己最优 ...

  4. codeforces215 E. Periodical Numbers(不一样的数位dp) 模板

    E. Periodical Numbers  time limit per test  2 seconds  memory limit per test  256 megabytes  input  ...

  5. LeetCode-【总结】dp问题小结

    dp分类 dp问题大致分为: 线性dp 背包dp 序列dp 区间dp 状压dp 数位dp -- 背包dp 参见:自己的背包dp总结 序列dp 经典问题:最长上升子序列.最长公共子序列 参见:自己的LI ...

  6. 蒜头君救人 状压DP

    蒜头君救人 题目描述 蒜头君是一个乐于助人的好孩子,这天他所在的乡村发生了洪水,有多名村民被困于孤岛上,于是蒜头君决定去背他们离开困境,假设蒜头君所在的村子是 n×m n×m 的网格,网格中.号代表平 ...

  7. 蓝桥杯国赛-矩阵计数三种解法-java实现

    题目提交 code 1. dfs暴力搜索 深搜所有状态,填X时要判断是否可行,没啥可说,暴力就完了,不过居然能过,规模确实小. import java.util.Scanner;//暴搜居然过 pub ...

  8. 提高篇 第五部分 动态规划 第4章 状态压缩类动态规划

    例1 骑士(Sgu223) 1592:[例 1]国王 信息学奥赛一本通(C++版)在线评测系统 https://blog.csdn.net/guoyangfan_/article/details/82 ...

  9. Wannafly挑战赛19:C. 多彩的树(状压+容斥)

    链接:https://www.nowcoder.com/acm/contest/131/C 来源:牛客网 题目描述 有一棵树包含 N 个节点,节点编号从 1 到 N.节点总共有 K 种颜色,颜色编号从 ...

  10. [题单]多校补题 2017-2012

    仅做初步了解并筛除了不大可能会解的题目 (一般都会咕的) hard表示榜单过题人数少于50或20(大概)的题目 ****2017**** 6034 贪心 6035 树形DP OO 6038 组合数学 ...

最新文章

  1. 多级反馈队列列算法的几点说明
  2. charles 抓包 (二)
  3. iptables_默认规则
  4. JavaScript的鼠标事件
  5. python中统计计数的几种方法和Counter的介绍
  6. RHCE认证培训+考试七天实录(一)
  7. jQuery效果之滑动
  8. 在nginx.conf中配置https
  9. 为何我中断执行的线程不起作用,Why
  10. python距离向量路由算法_python算法练习——动态规划与字符串的编辑距离
  11. pytorch 训练人脸精度不达标
  12. HMM:隐马尔科夫模型 - 学习
  13. JS总结 循环 退出循环 函数
  14. Log4cpp 配置文件格式说明
  15. (已成功)windows下,VS2012+Qt5.5.1的安装、路径配置、项目配置(其它版本可参考)
  16. 一分钟搞懂NB-IoT行业发展
  17. c51单片机音乐门铃C语言程序,89c51六首歌曲的音乐门铃程序
  18. 视频:这不是科幻,厉害了,用人工智能修长城
  19. leetcode解题思路分析(一百三十二)1111 - 1117 题
  20. ckplayer在手机用不了解决方法

热门文章

  1. php 增加mysql 索引,【PHP】为什么 MySQL 添加索引后就可以提高查询速度
  2. Kotlin学习笔记 第四章Kotlin调用Java
  3. 红橙Darren视频笔记 从AIDL Demo分析Android源码走向
  4. 韩顺平php视频笔记45 循环相关语句break,continue常量
  5. M1芯片Mac使用原生brew安装软件速度过慢的解决办法
  6. m1芯片MacBook安装本地编译版matplotlib库
  7. jvm原理、启动时间、与编译器操作系统关系
  8. php smtp邮件类,php利用smtp类发送邮件
  9. 事务没提交的数据查的出来吗?_品牛栏山,论分布式事务
  10. xampp mysql是空的_xampp中修改mysql默认空密码(root密码)的方法分享