分裂 BZOJ2064 状压DP
分析:
这个题很好啊,比起什么裸的状压DP高多了!
我们可以考虑,什么时候答案最大:全合并,之后再分裂
这样,我们必定可以得到答案,也就是说答案必定小于n+m
那么我们可以考虑,什么时候能够使答案更小:就是n中去一些,m中取一些,它们的和相等的时候,ans-=2;
这样,我们就可以考虑状态f[S][s]表示,在n中取状态S,m中取状态s的最多和相等部分
之后转移可以从f[S-1<<i-1][s]或者f[S][s-1<<i-1]转移,之后判断sum[S]和sum[s]是否相等,相等f[S][s]+=2;
最后答案为n+m-f[(1<<n)-1][(1<<m)-1];
附上代码:
#include <cstdio>
#include <algorithm>
#include <cmath>
#include <cstdlib>
#include <cstring>
#include <queue>
#include <iostream>
using namespace std;
#define N 11
#define M 1<<10
int f[M][M],a[N],b[N],n,m,sum[M],sum2[M];
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++)scanf("%d",&a[i]);
for(int S=1;S<1<<n;S++)
{
for(int i=1;i<=n;i++)
{
if((1<<(i-1))&S)
{
sum[S]=sum[S^(1<<(i-1))]+a[i];
break;
}
}
}
scanf("%d",&m);
for(int i=1;i<=m;i++)scanf("%d",&b[i]);
for(int S=1;S<1<<m;S++)
{
for(int i=1;i<=m;i++)
{
if((1<<(i-1))&S)
{
sum2[S]=sum2[S^(1<<(i-1))]+b[i];
break;
}
}
}
for(int S=1;S<1<<n;S++)
{
for(int s=1;s<1<<m;s++)
{
for(int i=1;i<=n;i++)
{
if(S&(1<<(i-1)))f[S][s]=max(f[S][s],f[S^(1<<(i-1))][s]);
}
for(int i=1;i<=m;i++)
{
if(s&(1<<(i-1)))f[S][s]=max(f[S][s],f[S][s^(1<<(i-1))]);
}
if(sum[S]==sum2[s])f[S][s]+=2;
}
}
printf("%d\n",n+m-f[(1<<n)-1][(1<<m)-1]);
return 0;
}
分裂 BZOJ2064 状压DP的更多相关文章
- BZOJ_2064_分裂_状压DP
		
BZOJ_2064_分裂_状压DP Description 背景: 和久必分,分久必和... 题目描述: 中国历史上上分分和和次数非常多..通读中国历史的WJMZBMR表示毫无压力. 同时经常搞OI的 ...
 - 2018.10.24 bzoj2064: 分裂(状压dp)
		
传送门 状压dp好题. 考虑对于两个给出的集合. 如果没有两个元素和相等的子集,那么只能全部拼起来之后再拆开,一共需要n1+n2−2n1+n2-2n1+n2−2. 如果有呢? 那么对于没有的就是子问题 ...
 - bzoj2064: 分裂(状压dp)
		
Description 背景: 和久必分,分久必和... 题目描述: 中国历史上上分分和和次数非常多..通读中国历史的WJMZBMR表示毫无压力. 同时经常搞OI的他把这个变成了一个数学模型. 假设中 ...
 - bzoj 2064: 分裂【状压dp】
		
参考:https://www.cnblogs.com/liu-runda/p/6019426.html 有点神奇 大概就是显然最直观的转移是全部合起来再一个一个拆,是n+m次,然后设f[i][j]为分 ...
 - 【BZOJ2064】分裂 状压DP
		
[BZOJ2064]分裂 Description 背景:和久必分,分久必和...题目描述:中国历史上上分分和和次数非常多..通读中国历史的WJMZBMR表示毫无压力.同时经常搞OI的他把这个变成了一个 ...
 - BZOJ 2064: 分裂( 状压dp )
		
n1+n2次一定可以满足..然后假如之前土地集合S1的子集subs1和之后土地集合S2的子集subs2相等的话...那么就少了2个+操作...所以最后答案就是n1+n2-少掉的最多操作数, 由状压dp ...
 - 状压dp学习笔记(紫例题集)
		
P3451旅游景点 Tourist Attractions 这个代码其实不算是正规题解的(因为我蒟蒻)是在我们的hzoj上内存限制324MIB情况下过掉的,而且经过研究感觉不太能用滚动数组,所以那这个 ...
 - BZOJ 1087: [SCOI2005]互不侵犯King [状压DP]
		
1087: [SCOI2005]互不侵犯King Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 3336 Solved: 1936[Submit][ ...
 - nefu1109 游戏争霸赛(状压dp)
		
题目链接:http://acm.nefu.edu.cn/JudgeOnline/problemShow.php?problem_id=1109 //我们校赛的一个题,状压dp,还在的人用1表示,被淘汰 ...
 
随机推荐
- x64系统WSC注册方法
			
@echo off title 注册WSC脚本部件 echo. ***************************************** echo. 支持x64系统(请以管理员身份运行) e ...
 - python学习笔记——python JSON
			
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,易于人阅读和编写. 1.JSON 函数 使用 JSON 函数需要导入 json 库:import json ...
 - JSP内置对象——application对象
			
下面来举个具体的实例: 运行结果: 其中,city,postcode,email是我自己保存的属性名称,然后最后一行还获取到了当前JSP或者SERVLET的引擎名及版本号.
 - Linux sudo 命令使用简介
			
Linux sudo 命令使用简介 by:授客 QQ:1033553122 基本语法: $ sudo [-u username] [command] -u:将身份变成username的身份 #编辑/e ...
 - ONLYOFFICE连接数20个限制的由来
			
搜onlyoffice document server的github上的issue,会得到这2个地址https://github.com/ONLYOFFICE/DocumentServer/issue ...
 - 【转】python version 2.7 required,which was not found in the registry
			
源地址:http://www.cnblogs.com/thinksasa/archive/2013/08/26/3283695.html 方法:新建一个register.py 文件,把一下代码贴进去, ...
 - LeetNode 题解之Reverse Nodes in k-Group
			
1.题目描述 2.问题分析 这个题本质上还是按照链表翻转的思路来解,只是需要添加一些细节判断. 3.代码 class Solution { public: ListNode* reverseKGrou ...
 - Unix操作系统监控详解(一)
			
一.描述 监控在检查系统问题运行状况以及优化系统性能工作上是一个不可缺少的部分.通过操作系统监控工具监视操作系统资源的使用情况,间接地反映了各服务器程序的运行情况.根据运行结果分析可以帮助我们快速定位 ...
 - jmeter如何保持JSESSIONID
			
利用Jmeter做接口测试的时候,如何提取头部的JSESSIONID然后传递到下一个请求,继续完成当前用户的请求. 一.如果响应数据里面没有返回JSESSIONID,直接添加http cookies ...
 - python 3.6 的 venv 模块
			
今天,在在使用 pycharm 的使用,进行创建 python的时候,发现使用默认的创建的选项使用的python 3环境 .而我系统默认的python环境是 python 2.7 环境:这就引起了我的 ...