博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
BZOJ2064: 分裂
阅读量:4500 次
发布时间:2019-06-08

本文共 1283 字,大约阅读时间需要 4 分钟。

2064: 分裂

Time Limit: 10 Sec  Memory Limit: 64 MB
Submit: 360  Solved: 220
[][][]

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,
 
题解:我们先考虑最坏情况,那就是我们先将n个合并(n-1次操作)在分给m个块(m-1次操作) 
   共n+m-2个操作,但是什么情况我们不需要如此复杂呢?我们可以当两个块相等的时候
   就停止合并到一个块的操作以及其分裂到几个个块的2个操作,于是ans-2,此时问题转变为
   枚举子集求最大相同子集个数(此处相同为权值和相同)于是状态压缩DP即可!
1 #include
2 #include
3 #include
4 #include
5 #include
6 #define N 1<<20 7 using namespace std; 8 int sum[N],f[N],n,m,all; 9 int read()10 {11 int x=0,f=1; char ch;12 while (ch=getchar(),ch<'0'||ch>'9') if (ch=='-') f=-1;13 while (x=x*10+ch-'0',ch=getchar(),ch>='0'&&ch<='9');14 return x*f;15 }16 int main()17 {18 n=read(); for (int i=0; i
View Code

 

转载于:https://www.cnblogs.com/HQHQ/p/5991991.html

你可能感兴趣的文章
作业4: 用户体验分析——以 “师路南通网站” 为例
查看>>
SurfaceViewVideoList网络获取视频播放
查看>>
Splash Screen开场屏在Android中的实现
查看>>
Oracle 笔记(二)
查看>>
微信公众号开发--访问网络用到的工具类
查看>>
wpf中利用多重绑定实现表中数据越界自动报警
查看>>
为Linux配置常用源:epel和IUS
查看>>
天府地
查看>>
C#高级编程
查看>>
JS实现从照片中裁切自已的肖像
查看>>
使用 https://git.io 缩短 a GitHub.com URL.
查看>>
拷贝、浅拷贝、深拷贝解答
查看>>
NS3 实验脚本的编写步骤
查看>>
四元数
查看>>
【Linux】Linux查看程序端口占用情况
查看>>
微软职位内部推荐-Software Development Engineer
查看>>
Git常用命令
查看>>
VC 菜单OnUPdate事件
查看>>
Windows 2003+IIS6+PHP5.4.10配置PHP支持空间的方法(转)
查看>>
去除express.js 3.5中报connect.multipart() will be removed in connect 3.0的警告(转)
查看>>