首页 技术 正文
技术 2022年11月23日
0 收藏 869 点赞 2,479 浏览 1273 个字

Description

背景: 和久必分,分久必和。。。 题目描述: 中国历史上上分分和和次数非常多。。通读中国历史的WJMZBMR表示毫无压力。 同时经常搞OI的他把这个变成了一个数学模型。 假设中国的国土总和是不变的。 每个国家都可以用他的国土面积代替, 又两种可能,一种是两个国家合并为1个,那么新国家的面积为两者之和。 一种是一个国家分裂为2个,那么2个新国家的面积之和为原国家的面积。 WJMZBMR现在知道了很遥远的过去中国的状态,又知道了中国现在的状态,想知道至少要几次操作(分裂和合并各算一次操作),能让中国从当时状态到达现在的状态。

Input

第一行一个数n1,表示当时的块数,接下来n1个数分别表示各块的面积。 第二行一个数n2,表示现在的块,接下来n2个数分别表示各块的面积。

Output

一行一个数表示最小次数。

Sample Input

1 6
3 1 2 3

Sample Output

2
数据范围:
对于100%的数据,n1,n2<=10,每个数<=50
对于30%的数据,n1,n2<=6 

题解

虽然数据小,但此题乍一看不可做。

于是我仔(cha)细(yue)思(ti)考(jie)。

有一种方法肯定是可以的,把以前的全部合并,再一个个分裂成现在的。

那么最少的方案怎么来呢?

如果以前的一部分可以单独对应(单独地合并分裂)到现在的一部分,就没必要把他们和剩下的再合到一起再分开了。

这个过程用dp解决。

为了方便,另以前的面积为正,现在的面积为负,于是就是要尽量的凑零。

于是我们要知道所有的选择的和。

这个用状压解决,另sum[S]表示把S对应的集合(转为二进制)的面积之和。

sum可以递推,用S&-S求出最小元素t,然后sum[S]=sum[t]+sum[S-t],常用技巧get。

f[S]表示S这个集合处理过程中最多能得到0的次数。

最优子结构,枚举每一个i∈S,f[S]=max(f[S^i])。

如果sum[S]=0,f[S]++。

最后答案就是n+m-2*f[Smax]。

n+m是最原始的做法,*2是一个0可以少一次合并一次分裂。

感觉也是一道不错的题。

代码

#include<cstdio>
#include<algorithm>
using namespace std;
const int maxn=;int f[<<maxn],sum[<<maxn];
int main(){
int n,m,x;
scanf("%d",&n);
for(int i=;i<n;i++)
scanf("%d",&sum[<<i]); scanf("%d",&m);
for(int i=n;i<n+m;i++){
scanf("%d",&x);
sum[<<i]=-x;
} int end=<<(n+m); for(int i=;i<end;i++){
int t=i&-i;
sum[i]=sum[t]+sum[i-t];
for(int j=;j<n+m;j++)
if(i&(<<j)) f[i]=max(f[i],f[i^(<<j)]);
if(!sum[i]) f[i]++;
} printf("%d",n+m-*f[end-]);
return ;
}
相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:8,999
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,511
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,357
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,140
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,770
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,848