BZOJ2064 分裂
来源:互联网 发布:雪梨网红淘宝店链接 编辑:程序博客网 时间:2024/04/29 10:53
只 都是这句话什么玩意……
可 我们发现我们可以把分裂过程分成几组,每一组都是初始那一堆合成一堆再分裂成结果那一堆
意 这样的话每一组只要满足初始的和与结束的和相等即可
会 所以答案就是n1+n2-2*最多组数
不 f[i]表示集合为i,最多组数是多少
可 然后转移转移……
言 如果这个整个集合都是和为0那么一定存在一个在一个和为0的组里
传 如果整个集合不为0那么一定存在一个不在组里
的 所以把每个都单拎出来然后转移就好了……
状
压
D
P
#include<iostream>#include<cstring>#include<cstdio>#include<cstdlib>#include<cmath>#include<ctime>#include<algorithm>#include<iomanip>#include<map>#include<set>#include<bitset>#include<queue>#include<stack>#include<vector>using namespace std;#define MAXN 510#define MAXM 2000010#define INF 1000000000#define eps 1e-8#define MOD 1000000007#define ll long longint n,m;int v[MAXN];int s[MAXM],f[MAXM];int main(){int i,j;scanf("%d",&n);for(i=1;i<=n;i++){scanf("%d",&v[i]);}scanf("%d",&m);n+=m;for(;i<=n;i++){scanf("%d",&v[i]);v[i]*=-1;}int N=(1<<n);for(i=1;i<N;i++){for(j=1;j<=n;j++){if(i&(1<<(j-1))){break;}}s[i]=s[i^(1<<(j-1))]+v[j];for(j=1;j<=n;j++){if(i&(1<<(j-1))){f[i]=max(f[i],f[i^(1<<(j-1))]+(!s[i]));}}}printf("%d\n",n-f[N-1]*2);return 0;}/**/
0 0
- 【BZOJ2064】分裂
- bzoj2064: 分裂
- bzoj2064 分裂
- BZOJ2064 分裂
- bzoj2064分裂
- BZOJ2064 分裂
- 【bzoj2064】分裂
- [bzoj2064] 分裂 状压dp
- [BZOJ2064]分裂(状压dp)
- [BZOJ2064]分裂(状压dp)
- bzoj2064 分裂(状压DP)
- BZOJ2064:分裂(状压DP)
- 【BZOJ2064】分裂(状压dp+奇技淫巧)
- 【bzoj2064】【分裂】状态压缩表示合并子集
- bzoj2064 分裂 状压dp(神题)
- [BZOJ2064]-分裂-状压dp思路好题
- bzoj2064分裂 关于一类状压问题的总结
- bzoj2064(状压dp)
- 第三周项目1-顺序表的基本运算
- VMware 11.1 安装Mac OS X 10.10 中问题解决
- HDU 5875 Function
- 使用sed做符号替换
- 多线程学习篇(一)关键代码段
- BZOJ2064 分裂
- 错题总结--黑马程序员之基础班入班考试
- [Python模块学习]用hashlib模块生成消息摘要
- 大连网赛1006 hdu 5873
- UIButton中setTitleEdgeInsets和setImageEdgeInsets的使用
- 2016计算机网络复习
- (转)java datetime date 类型
- Objective-C总Runtime的那点事儿(一)消息机制
- 16 读取短信内容