bzoj2064
这道题初看真的毫无思路,又是合并又是分裂的
但实际上我们知道,当两组和相等的时候才能由一组变成另一组
我们将初始状态和最终状态划分成若干对,每对中的两组元素和相等的
不难发现,最少步骤=n+m-2*对数
因为在一对不能再划分的组中,具有k个元素变换到具有j个元素所花的最短步骤是k+j-2
于是问题就转化为了怎么划分,划分的对数最多
由于n,m<=10,这样我们就可以把选取状况用01二进制表示来解决了;
我们先算出每个状态的每种组合情况的和
f[x,y]表示初始状态选取状况为x,最终状态选取状况为y的时候,最多划分成的对数
然后方便转移,我们可以采用记忆化搜索的方式
这道题题解不大好表达,只可意会不可言传
var w,f:array[..,..] of longint;
sum,a,b,c:array[..] of longint;
n,m,i,j,s1,s2,s:longint;
function max(a,b:longint):longint;
begin
if a>b then exit(a) else exit(b);
end; function dfs(x,y:longint):longint;
var i,j,k:longint;
begin
if (x=s1) then
begin
if y<>s2 then exit(-)
else exit();
end;
if (y=s2) then
begin
if s1=x then exit()
else exit(-);
end;
if f[x,y]<>- then exit(f[x,y]); //记忆化
for i:= to s1 do
begin
if i and x= then
begin
k:=sum[i];
for j:= to c[k] do //在最终状态中找一个和初始状态的组合和相等的组形成新的一对
if w[k,j] and y= then
f[x,y]:=max(f[x,y],dfs(x xor i,y xor w[k,j])+);
end;
end;
exit(f[x,y]);
end; begin
read(n);
for i:= to n do
read(a[i]);
read(m);
for i:= to m do
read(b[i]);
s1:= shl n-;
s2:= shl m-;
for i:= to s1 do
for j:= to n- do
if i and ( shl j)> then
sum[i]:=sum[i]+a[j+];
for i:= to s2 do
begin
s:=;
for j:= to m- do
if i and ( shl j)> then
s:=s+b[j+];
inc(c[s]); //感觉这种做法很像Meet in middle
w[s,c[s]]:=i;
end;
fillchar(f,sizeof(f),);
writeln(n+m-*dfs(,));
end.
bzoj2064的更多相关文章
- 【BZOJ2064】分裂 状压DP
[BZOJ2064]分裂 Description 背景:和久必分,分久必和...题目描述:中国历史上上分分和和次数非常多..通读中国历史的WJMZBMR表示毫无压力.同时经常搞OI的他把这个变成了一个 ...
- bzoj2064[和谐社会模拟赛]分裂
题意:给定一个初始集合和目标集合,有两种操作:1.合并集合中的两个元素,新元素为两个元素之和 2.分裂集合中的一个元素,得到的两个新元素之和等于原先的元素.要求用最小步数使初始集合变为目标集合,求最小 ...
- BZOJ2064: 分裂
2064: 分裂 Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 360 Solved: 220[Submit][Status][Discuss] De ...
- 【状压dp】Bzoj2064 分裂
Description 背景: 和久必分,分久必和... 题目描述: 中国历史上上分分和和次数非常多..通读中国历史的WJMZBMR表示毫无压力. 同时经常搞OI的他把这个变成了一个数学模型. 假设中 ...
- 2018.10.24 bzoj2064: 分裂(状压dp)
传送门 状压dp好题. 考虑对于两个给出的集合. 如果没有两个元素和相等的子集,那么只能全部拼起来之后再拆开,一共需要n1+n2−2n1+n2-2n1+n2−2. 如果有呢? 那么对于没有的就是子问题 ...
- 分裂 BZOJ2064 状压DP
分析: 这个题很好啊,比起什么裸的状压DP高多了! 我们可以考虑,什么时候答案最大:全合并,之后再分裂 这样,我们必定可以得到答案,也就是说答案必定小于n+m 那么我们可以考虑,什么时候能够使答案更小 ...
- BZOJ2064:分裂——题解
http://www.lydsy.com/JudgeOnline/problem.php?id=2064 Description 背景: 和久必分,分久必和... 题目描述: 中国历史上上分分和和次数 ...
- bzoj2064: 分裂(集合DP)
......咸鱼了将近一个月,因为沉迷ingress作业越来越多一直没时间搞OI呜呜呜 题目大意:有一个初始集合(n个元素)和一个目标集合(m个元素)(1<=n,m<=10),两个操作 ...
- 【bzoj2064】分裂【压状dp】
Description 背景: 和久必分,分久必和... 题目描述: 中国历史上上分分和和次数非常多..通读中国历史的WJMZBMR表示毫无压力. 同时经常搞OI的他把这个变成了一个数学模型. 假设中 ...
随机推荐
- Linux ssh/scp连接时避免输入yes(公钥验证)并防止出现POSSIBLE BREAK-IN ATTEM
方法一:连接时加入StrictHostKeyChecking=no ssh -o StrictHostKeyChecking=no root@192.168.1.100 方法二:修改/etc/ssh/ ...
- CSS常见问题及兼容性
CSS常见问题 1 (IE6,7)H5标签兼容 解决方法1:(只显示核心代码) 1<script> ; ; ; ;;;};;;;;;;; ...
- css3 盒模型
0,前言 在css2.1 之前,我们都熟知的两种盒模型,一种是w3c标准盒模型,另外一种是怪异模式下的盒模型.在css3之前我们一直使用的是标准盒模型,但是标准盒模型的宽度总是需要小心的去使用,稍有不 ...
- Intellj新增maven项目骨架
我们经常用maven骨架构建项目,本来普通的几个archetype就够用的,但是近来要来时开发liferay项目 相关的项目骨架Intellj IDEA就没有内置,所以就想添加进去, 有两个办法可以 ...
- .net数据传递的格式
1 Object 返回数据库查询后的单个值 public object LoadBusinessScopeById(int id) { string sql = "select [name] ...
- 最新的C#SqlHelper 类苏飞修改版(转载)
/// <summary> /// 类说明:公共的数据库访问访问类 /// 编码日期:2010-4-22 /// 编 码 人:苏飞 /// 联系方式:361983679 Email:[ur ...
- Android- Context理解
学习了安卓以后还是不理解Context的用法:Api文档链接http://wear.techbrood.com/reference/android/content/Context.html 一个非常好 ...
- JS异步阻塞的迷思
还是百度前端技术学院的“任务十九”可视化排序算法的题,在写出快速排序算法之后,要求用动画的形式把这个排序过程呈现出来.排序过程在CPU里不过是瞬间的事,但要转换成“缓慢的”动画效果给人类看,就不得不把 ...
- ASP.NET配置KindEditor文本编辑器-图文实例
1.什么是KindEditor KindEditor 是一套开源的在线HTML编辑器,主要用于让用户在网站上获得所见即所得编辑效果,开发人员可以用 KindEditor 把传统的多行文本输入框(tex ...
- ZOJ 1074 To the Max(DP 最大子矩阵和)
To the Max Time Limit: 2 Seconds Memory Limit: 65536 KB Problem Given a two-dimensional array o ...