分裂 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表示,被淘汰 ...
随机推荐
- 关于animation的一些简单基础和使用方法记载
第一次写博客,只是单纯的想把我自己的一些心得和使用过的css3的animation的一些方法记录和总结,方便下次使用,我写的这些都是刚入门适合做一些简单的动画动作,过于复杂的还有待发掘或者使用别的方法 ...
- 语义SLAM的数据关联和语义定位(四)多目标测量概率模型
多目标模型 这部分想讲一下Semantic Localization Via the Matrix Permanent这篇文章的多目标测量概率模型.考虑到实际情况中,目标检测算法从单张图像中可能检测出 ...
- Android--将实体类转化成Json和Map的基类
package com.newair.talk.base; import android.text.TextUtils; import com.google.gson.Gson; import jav ...
- 【Python】keras神经网络识别mnist
上次用Matlab写过一个识别Mnist的神经网络,地址在:https://www.cnblogs.com/tiandsp/p/9042908.html 这次又用Keras做了一个差不多的,毕竟,现在 ...
- Mybatis 学习笔记
可学习渠道 MYBATIS 入门教程 1. Mybatis 介绍 Mybatis 是 sqlmap 技术,对 JDBC 进行封装,将大量的 SQL 语句外部化. 平时我们都用JDBC访问数据库,除了 ...
- kettle 启动spoon一闪而过
Kettle是Pentaho的一个组件,主要用于数据库间的数据迁移(ETL). Kettle有三个主要组件:Spoon,Kitchen,Pan.其中Spoon是一个图形化的界面. 一.安装kettle ...
- 深入浅出Web开发——Fiddler
环境配置: 如果使用Chrome,Fiddler无法捕捉HTTP请求信息,请检查Chrome是否使用SwitchyOmega插件.
- October 13th 2017 Week 41st Friday
The shortest distance between two people is a smile. 人与人之间最短的距离是微笑. I find a smiling face can bring ...
- RLP(转发注明出处)
目录 RLP序列化 什么是序列化? 为什么要序列化? RLP序列化处理的两项数据 RLP序列化采取的5项规则: 利用python写的RLP 实际中的使用是个怎么样子? RLP分析 参考目录 @ RLP ...
- vue-cli静态资源处理
vue-cli是利用webpack进行打包部署,其中静态资源的路径问题是一个比较麻烦的部分. 项目中共有两个存放静态文件的地方. /static 根目录下的static文件夹 assets src目录 ...