[BZOJ 2064]分裂】的更多相关文章

n1+n2次一定可以满足..然后假如之前土地集合S1的子集subs1和之后土地集合S2的子集subs2相等的话...那么就少了2个+操作...所以最后答案就是n1+n2-少掉的最多操作数, 由状压dp完成... ------------------------------------------------------------------------ #include<cstdio> #include<cstring> #include<algorithm>   u…
2064: 分裂 Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 572  Solved: 352[Submit][Status][Discuss] Description 背景: 和久必分,分久必和... 题目描述: 中国历史上上分分和和次数非常多..通读中国历史的WJMZBMR表示毫无压力. 同时经常搞OI的他把这个变成了一个数学模型. 假设中国的国土总和是不变的. 每个国家都可以用他的国土面积代替, 又两种可能,一种是两个国家合并为1个,那么新…
2064: 分裂 Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 570  Solved: 350[Submit][Status][Discuss] Description 背景: 和久必分,分久必和... 题目描述: 中国历史上上分分和和次数非常多..通读中国历史的WJMZBMR表示毫无压力. 同时经常搞OI的他把这个变成了一个数学模型. 假设中国的国土总和是不变的. 每个国家都可以用他的国土面积代替, 又两种可能,一种是两个国家合并为1个,那么新…
传送门 题意:一开始$n$块面积最后$m$块面积,面积和相等每次可以分裂或者合并,问最少几次 昨天忘发了... 不会.... 考虑最差情况,$n+m-2$所有先合并再分裂 发现只有当前后两个子集相等时可以变成对方 如果前后能分成$k$堆对应相等,次数就是$n+m-2*k$ 问题就是求前后各能分成几堆面积相等 混在一起,后面的面积改为负 $f[i]$表示选了集合$i$里的土地,能分成几个互不相交的权值为$0$的子集 $f[i]=max{f[i^(1<<j)]}+ sum[i]==0 $ 因为$0…
参考:https://www.cnblogs.com/liu-runda/p/6019426.html 有点神奇 大概就是显然最直观的转移是全部合起来再一个一个拆,是n+m次,然后设f[i][j]为分别取i,j状态的最多相同大小块的集合数,枚举新加块转移,答案是n+m-2*f[(1<<n)-1][(1<<m)-1] 原因是体积和相同的两个快可以自己转移,不用再和别的块合并一下 #include<iostream> #include<cstdio> using…
最多的操作次数是 $n+m-1$ (相当于把第一个暴力合并,再暴力拆成第二个).如果第一个序列的一个子序列和第二个区间的子序列相等,那么总次数就可以减 $2$.将第二个序列所有数取反,直接求解有多少个子序列的和为 $0$ 即可 $ans=n+m-dp[1<<(n+m)-1]$具体: $dp[i]=max(dp[i],dp[i xor (j<<1)])$ $dp[i]=dp[i]+1, sum[i]=0$ #include<cstdio> #include<algo…
Description 背景: 和久必分,分久必和... 题目描述: 中国历史上上分分和和次数非常多..通读中国历史的WJMZBMR表示毫无压力. 同时经常搞OI的他把这个变成了一个数学模型. 假设中国的国土总和是不变的. 每个国家都可以用他的国土面积代替, 又两种可能,一种是两个国家合并为1个,那么新国家的面积为两者之和. 一种是一个国家分裂为2个,那么2个新国家的面积之和为原国家的面积. WJMZBMR现在知道了很遥远的过去中国的状态,又知道了中国现在的状态,想知道至少要几次操作(分裂和合并…
传送门 题目大意: 给两个数组, 数组中的两个元素可以合并成两元素之和,每个元素都可以分裂成相应的大小,问从数组1变化到数组2至少需要多少步? 题目分析: 看到数据范围\(n<=10\), 显然是在提醒我们状压.用sum[i]表示i状态的面积总和. 对于任意一个数组\(1\)和数组\(2\)(\(sum\)值必须相等才能变化),变化的最劣情况是将数组\(1\)合并成1个再分成数组\(2\),步数为\(n1 + n2 - 2\),然而如果数组\(1\)的一个子集\(k\)和数组\(2\)的一个子集…
如果把每堆巧克力看做一个子游戏,那么子游戏会互相影响. 如果把全部堆看做一个子游戏,那么状态又太多. 如果把每一个单独的巧克力看成一个子游戏的话,那么状态很少又不会互相影响. 令sg[i]表示一个巧克力在第i堆的sg值.那么sg[i]=mex(sg[j]^sg[k])(k>=j>i);边界状态为sg[n]=0. 所以这整个游戏的sg值就是这些巧克力的异或和了. 由于n<=21.所以可以O(n^3)枚举第一步,再看第一步转移后游戏的异或值即可. # include <cstdio&g…
这道题可以抽象成两个数列,将一个数列变换为另一个 数列的代价最小 首先我们可以处理出所有的状态代表,对于每个状态 用二进制来表示,代表的是两个数列中的每一项选还是不选 那么答案最多为n1+n2-2,也就是先将第一个数列合成一个数 然后再依次拆成第二个数列,那么假设第一个数列选一些,第二个数 列选一些,这个子问题合法(就是第一个数列的选出的和与第二 个的相等),那么我们就没有必要将这个子问题再与大问题合并,也 就是答案减少了2,这样DP就行了 /**************************…