BZOJ 2064: 分裂( 状压dp )
2015-11-22 21:39
676 查看
n1+n2次一定可以满足..然后假如之前土地集合S1的子集subs1和之后土地集合S2的子集subs2相等的话...那么就少了2个+操作...所以最后答案就是n1+n2-少掉的最多操作数, 由状压dp完成...
------------------------------------------------------------------------
#include<cstdio>
#include<cstring>#include<algorithm> using namespace std; #define b(i) (1 << (i))#define lowbit(x) ((x) & -(x)) const int maxn = 21; int dp[b(maxn)], sum[b(maxn)];int n, m; void Init() { memset(dp, 0, sizeof dp); sum[0] = 0; scanf("%d", &n); for(int i = 0; i < n; i++) scanf("%d", sum + b(i)); scanf("%d", &m); for(int i = n; i < n + m; i++) { scanf("%d", sum + b(i)); sum[b(i)] = -sum[b(i)]; }} void Dp() { for(int S = 1, All = b(n + m); S < All; S++) { sum[S] = sum[lowbit(S)] + sum[S ^ lowbit(S)]; for(int i = n + m; i--; ) if(S & b(i)) dp[S] = max(dp[S], dp[S ^ b(i)]); dp[S] += !sum[S]; } printf("%d\n", n + m - 2 * dp[b(n + m) - 1]);} int main() { Init(); Dp(); return 0;}------------------------------------------------------------------------
2064: 分裂
Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 252 Solved: 156
[Submit][Status][Discuss]
Description
背景: 和久必分,分久必和。。。 题目描述: 中国历史上上分分和和次数非常多。。通读中国历史的WJMZBMR表示毫无压力。 同时经常搞OI的他把这个变成了一个数学模型。 假设中国的国土总和是不变的。 每个国家都可以用他的国土面积代替, 又两种可能,一种是两个国家合并为1个,那么新国家的面积为两者之和。 一种是一个国家分裂为2个,那么2个新国家的面积之和为原国家的面积。 WJMZBMR现在知道了很遥远的过去中国的状态,又知道了中国现在的状态,想知道至少要几次操作(分裂和合并各算一次操作),能让中国从当时状态到达现在的状态。Input
第一行一个数n1,表示当时的块数,接下来n1个数分别表示各块的面积。 第二行一个数n2,表示现在的块,接下来n2个数分别表示各块的面积。Output
一行一个数表示最小次数。Sample Input
1 63 1 2 3
Sample Output
2数据范围:
对于100%的数据,n1,n2<=10,每个数<=50
对于30%的数据,n1,n2<=6,
HINT
Source
和谐社会模拟赛相关文章推荐
- mark- PHP_CURL1之模拟POST登陆
- MongoDB是一个介于关系数据库和非关系数据库之间的产品
- java 汉字排序(思路一)
- Intellij IDEA 创建Web项目并在Tomcat中部署运行
- 在Mac上面安装Tomcat 8.0
- 1013. Battle Over Cities (25)
- Mysql-Proxy实现mysql读写分离、负载均衡 (转)
- css3做背景渐变
- SpringMVC项目 URL不进ACTION_
- java多线程--给点1,2,A,B四个线程,交叉输出数字和字母
- JNI编写
- 【“知原理”检验题目——第12周】
- Android Studio上git的使用(2)
- angularJS学习之路(五)---表达式
- Log4j在Java中的使用
- ubuntu下安装jdk、tomcat、mysql
- 盐水的故事
- discuz 登录代码
- 哈夫曼树
- insta经典滤镜下载