棋盘:(状压dp)

传送门:https://www.cometoj.com/contest/38/problem/B?problem_id=1535

题目描述

小猫有一个 2×N 的棋盘,每一个格子放着一个黑棋子或白棋子。

小熊觉得小猫的棋盘不够好看,想要把棋盘上的一部分白棋子替换成黑棋子,使得所有黑棋子都能够在仅允许上下左右四个方向走,且仅经过黑棋子在的格子的情况下两两互相到达。

小熊想知道至少要将多少个白棋子替换成黑棋子。

注意:不能将黑棋子替换成白棋子。

输入描述

第一行有一个正整数 N (1≤N≤105)。

接下来两行,每行 N个整数,描述整个棋盘。若第 i 行的第 j个整数是 0,代表棋盘 (i,j) 的位置放着白棋子,若是 1 则放着黑棋子。

数据保证至少存在一个黑棋子。

输出描述

输出一行包含一个整数,表示答案。

样例输入 1

3
1 0 0
0 0 1

样例输出 1

2

样例输入 2

5
0 1 0 1 0
0 0 1 0 0

样例输出 2

1

提示


样例一中可以将第一行的两个白棋子替换成黑棋子。

样例二中可以将位置 (1, 3)(1,3) 的白棋子换成黑棋子。

 
大佬分析:(自己完全没想到QAQ)
 题⽬意思就是说通过把0 变成1 来将所有 变成⼀个联通块,要求最少的变换个数。我是⽤的暴⼒模拟,从第⼀列
开始遍历每⼀列,因为只有两⾏,含1的每⼀列⽆⾮就是:上 1下 1,上0 下 1,上1 下0 ;只有这三种情况是需要变
化前⾯列的 来使 联通的,观察这三种情况,上1 下1 时,变换个数就是上⼀次有 的列号与当前列号差值的绝对
值 (直接由上⼀个有 的位置沿着⾏直线变化到当前列);上 1下0 时,就需要看上⼀次有1 的那⼀列的1 的情况
了,如果上⼀次有 1处和当前列有1 处是同⼀⾏,说明可以直线变换过来,变换个数就是上⼀次有 1的列号与当前
列号差值的绝对值-1 ,如果不是同⼀⾏,则需要多加 1(需要多变换⼀个棋⼦);上 下 的情况和上⼀种情况类
似解法。因此关键就是保存上⼀次有 1处的那列情况,在遇到某列有 时考虑上⾯的情况然后累加就⾏了。
 
AC代码:
 /* */
# include <stdio.h>
int main()
{
long long int map[][]={}, n, i, j, sum=;
scanf("%lld", &n);
for( i=; i<; i++ )
{
for( j=; j<n; j++ )
{
scanf("%lld", &map[i][j]);
}
}
int nowone = ;
int nowtwo = ;
int flag=;
int f;
int pre;
for( j=; j<n; j++ )
{
nowone=;
nowtwo=;
if( map[][j] )
{
nowone = ;
}
if( map[][j] )
{
nowtwo = ;
}
if( nowone || nowtwo )
{
if( flag== )
{
f = j;
if( nowone )///上1下0
{
pre = ;
}
if( nowtwo )///上0下1
{
pre = ;
}
if( nowone && nowtwo )///上1下1
{
pre = ;
}
flag = ;
}
else
{
if( nowone && nowtwo )
{
sum += j - f - ;
pre = ;
}
if( nowone && !nowtwo )///上1下0
{
sum += j-f-;
if( pre== )///上0下1
{
sum++;
pre = ;///前方不连通则变为联通,此时这一列的状态变为上1下1
}
else
{
pre = ;///前方已经联通,这一列的状态不变
}
}
if( !nowone && nowtwo )///上0下1
{
sum += j - f - ;
if( pre== )///上1下0
{
sum++;
pre = ;///前方不连通则变为联通,此时这一列的状态变为上1下1
}
else
{
pre=;///前方已经联通,这一列的状态不变
}
}
f = j;
}
}
}
printf("%lld\n", sum);
return ;
}
 
 

cometoj---contest#3 棋盘的更多相关文章

  1. [Cometoj#3 B]棋盘_状压dp

    棋盘 题目链接:https://cometoj.com/contest/38/problem/B?problem_id=1535 数据范围:略. 题解: 因为行数特别小,所以$dp$的时候可以状压起来 ...

  2. CometOJ Contest #3 C

    题目链接:https://cometoj.com/contest/38/problem/C?problem_id=1542&myself=0&result=0&page=1&a ...

  3. 【杂题】【CometOJ Contest #5】E:迫真大游戏【概率】【排列组合】【多项式】

    Description 有一个n个点的环,有一个指针会从1号点开始向后扫描,每次扫描有p的概率删除当前点 询问每个点最后一个被删除的概率. 答案对998244353取模 n<=200000 So ...

  4. 「CometOJ」Contest #11

    Link Aeon 显然字典序最大就是把最小的字母放在最后 Business [动态规划] 简单dp dp[i][j]dp[i][j]dp[i][j]表示到第iii天,当前有jjj块钱,最后返还的钱最 ...

  5. Comet OJ - Contest #3 B -棋盘 (思维+分类讨论)

    题目描述 小猫有一个 2\times N2×N 的棋盘,每一个格子放着一个黑棋子或白棋子. 小熊觉得小猫的棋盘不够好看,想要把棋盘上的一部分白棋子替换成黑棋子,使得所有黑棋子都能够在仅允许上下左右四个 ...

  6. 【CometOJ】Comet OJ - Contest #8 解题报告

    点此进入比赛 \(A\):杀手皇后(点此看题面) 大致题意: 求字典序最小的字符串. 一场比赛总有送分题... #include<bits/stdc++.h> #define Tp tem ...

  7. 2016 Multi-University Training Contest 3

    5/11 2016 Multi-University Training Contest 3官方题解 2016年多校训练第三场 老年选手历险记 暴力 A Sqrt Bo(CYD) 题意:问进行多少次开根 ...

  8. [contest 782] 9.7

    [contest 782] 9.7 - XJOI 个人觉得温暖题啊,,,可是卡毛空间呀!!! T1 传送

  9. Comet OJ - Contest #2 简要题解

    Comet OJ - Contest #2 简要题解 cometoj A 模拟,复杂度是对数级的. code B 易知\(p\in[l,r]\),且最终的利润关于\(p\)的表达式为\(\frac{( ...

随机推荐

  1. python --- 字符编码学习小结(二)

    距离上一篇的python --- 字符编码学习小结(一)已经过去2年了,2年的时间里,确实也遇到了各种各样的字符编码问题,也能解决,但是每次都是把所有的方法都试一遍,然后终于正常.这种方法显然是不科学 ...

  2. Unable to instantiate org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient报错,问题排查

    背景 最近在整合pyspark与hive,新安装spark-2.3.3以客户端的方式访问hive数据,运行方式使用spark on yarn,但是在配置spark读取hive数据的时候,这里直接把hi ...

  3. “http”和“https”的区别是什么?优缺点是什么?

    1. http 的URL 以http:// 开头,https以https:// 开头. 2. http 标准端口是80 ,https是443. 3.https 协议需要到ca申请证书,http不需要. ...

  4. android studio 出现 Default Activity not found

    1.AndroidManifest.xml <activity android:name=".activity.StartPage" android:screenOrient ...

  5. RedHat6.9下替换yum源

    因为RedHat的yum需要收费,且要注册后才能使用.因此想把Yum源更新为CentOS的.使用的RedHat版本为6.9,因此对应的CentOS版本也要为6.9 1. 检查并删除原有的yum源 rp ...

  6. 批处理引擎MapReduce内部原理

    批处理引擎MapReduce内部原理 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.MapReduce作业生命周期 MapReduce作业作为一种分布式应用程序,可直接运行在H ...

  7. 2013.6.21 - OpenNER第一天

    下午去实验室继续写实验报告,跟伟杰要了一个实验报告,然后大师兄叫我,我们在走廊唠了一会儿. 大 师兄想做Open NE,他说这个会比较难,目前没有人做,因为还没有发现相关的文章,大家研究的都是指定了哪 ...

  8. qingqing的项目

    1 https://www.cnblogs.com/zhangqing979797/p/10147679.html 2 https://www.cnblogs.com/zhangqing979797/ ...

  9. HTTP和HTTPS的区别和常见的面试题

    本篇会着重介绍http和https的区别和常见的面试题 常见的http和https面试题: Http与Https的基本概念和他们的区别 HTTPS工作原理 常用的HTTP方法有哪些 GET方法与POS ...

  10. test20190725 夏令营测试11

    50+80+90=220.(每题满分90) 砍树 小A在一条水平的马路上种了n棵树,过了几年树都长得很高大了,每棵树都可以看作是一条长度为a[i]的竖线段.由于有的树过于高大,挡住了其他的树,使得另一 ...