[BZOJ 2064]分裂:状压DP
来源:互联网 发布:linux搭建php开发环境 编辑:程序博客网 时间:2024/06/07 00:28
点击这里查看原题
状压DP,sum[i]表示状态i时的面积和,f[i]表示状态i时可以少操作的次数。
因为可以把所有块合成一大块然后分裂,所以操作最多不超过n+m-2次,而如果有某个子集中的块面积和为0,则可以少操作2次,因此最终答案为n+m-f[1<<(n+m)-1]。
/*User:SmallLanguage:C++Problem No.:2064*/#include<bits/stdc++.h>#define ll long long#define inf 999999999using namespace std;const int M=(1<<20)+5;int sum[M],f[M],n,m,ed;int main(){ freopen("data.in","r",stdin);// scanf("%d",&n); for(int i=1;i<=n;i++) scanf("%d",&sum[1<<i>>1]); scanf("%d",&m); for(int i=1;i<=m;i++){ scanf("%d",&sum[1<<(i+n)>>1]); sum[1<<(i+n)>>1]=-sum[1<<(i+n)>>1]; } n+=m; ed=(1<<n)-1; for(int i=1;i<=ed;i++){ int t=i&-i; sum[i]=sum[t]+sum[i-t]; for(int j=0;j<n;j++) if((i>>j)&1) f[i]=max(f[i],f[i^(1<<j)]); if(sum[i]==0) f[i]++; } printf("%d\n",n-2*f[ed]); return 0;}
0 0
- bzoj 2064 分裂 状压dp
- [BZOJ 2064]分裂:状压DP
- BZOJ 2064: 分裂 状压dp
- BZOJ 2064: 分裂 状压dp
- BZOJ 2064: 分裂 状压DP
- bzoj 2064: 分裂(状压dp)
- BZOJ 2064: 分裂 状压DP题解
- [BZOJ]2064 分裂 状压DP 思路神题
- 2064: 分裂 状压DP
- BZOJ 2064: 分裂|状压动规
- BZOJ 2064 分裂
- 状压DP 分裂
- [bzoj2064] 分裂 状压dp
- bzoj 2064: 分裂【状态压缩】
- [BZOJ2064]分裂(状压dp)
- [BZOJ2064]分裂(状压dp)
- bzoj2064 分裂(状压DP)
- BZOJ2064:分裂(状压DP)
- 二叉树的最小深度
- 加密解密相关网页
- hdu 1506 Largest Rectangle in a Histogram
- 字符串扩展
- angular2系列教程(二)模板语法
- [BZOJ 2064]分裂:状压DP
- 4.7 4.9 节练习
- Python 判断 有向图 是否有环
- 某狗2017实习生面试
- 关于tensorflow中的scope的命名及使用方法
- 动态规划:公共子序列
- angular2系列教程(一)hello world
- 菜鸟于心
- Java同步并发容器类