Codeforces 111 C

题意:给\(n\times m\)的网格,每个点上有一个蜘蛛,每个蜘蛛可以向上、下、左、右走一步或者不动,问最多能存在多少没有蜘蛛的点。

思路1:

首先因为\(n\)和\(m\)中小的那个不可能超过\(6\),所以钦定\(m < n\)(因为如果\(n\)和\(m\)互换不影响答案)。

然后就可以考虑状压\(dp\)了。

首先我们看\((x,y)\)这个点上面可爱的小蜘蛛的去向。它可能会往上走,到\((x-1,y)\);也可能向下走,到\((x+1,y)\);也可能向左右走;所以就会发现在不断向下一个点移动的过程中,对于\((x,y)\)有影响的是从\((x-1,y)\)到\((x+1,y)\)的\(2\times m+1\)个点。所以\(dp\)状态和转移方程都可以求出辣:\(dp(x,y,mask)\)表示到了\((x,y)\)这个点,\(mask\)表示从\((x-1,y)\)到\((x+1,y)\)的点是否是蜘蛛集合点。

转移方程和\((x,y)​\)上的蜘蛛往哪个方向去走有关,或者它停在原地,它去的那个点必须是蜘蛛集合点,如果原来不是,那么答案必须加1。然后转移到下一个点即可。

思路2:

首先还是钦定\(m < n\)。

然后还是考虑状压\(dp\),其状态为\(dp(x,mask)\)。表示第\(x\)行时的状态。

这里\(mask\)保存的是当前行和上一行的所有的蜘蛛是否已经有地方去,然后转移的时候用\(dfs\)枚举一行中哪些点作为集合点(这里需要枚举所有集合点的集合),同时将其四周的点的状态赋为有地方去,然后让当前行的上一行不要有没地方去的点,继续考虑下一行的\(dp\)。

思路3:

钦定\(m < n​\),考虑状压\(dp​\),其状态为\(dp(x,mask)​\)。

这里\(mask\)保存的是当前行与上一行的集合点集,\(dp\)的值是考虑最多的空闲点的个数。

转移的时候枚举这一行新的集合点集以及下一行的集合点集,然后判断是否有当前行原来是集合点而现在不是的,有没有当前行没地方去的点,如果都没有就可以进入下一行的\(dp\)。

总结:

这3种思路较快的是思路1、2,然后较慢的是思路3,因为思路1的时间复杂度是\(O(n\times m\times 2^{2\times m+1})\),思路2的复杂度是\(O(n\times2^{3\times m})\),思路3的复杂度是\(O(n\times2^{4\times m})\)。

由此可见,状压\(dp\)的状态选择方面,对于复杂度是有非常大的影响的。

2019.03.03补充:
思路:我们考虑状压\(dp\)。\(dp(i,mask0,mask1)\)表示现在我们到了第\(i\)行,第\(i-1\)行的点中\(mask0\)内的的都被十字覆盖过了,第\(i\)行的点中\(mask1\)内的点都被十字覆盖过了,最少的十字数量。

现在枚举以第\(i\)行为中心的十字有哪些,存在\(mask2\)中。然后必须的是第\(i\)行的十字必须将\(mask0\)中可能有的一些空缺填满,然后并且会将\(mask1\)中的\(mask2\)中的点及其左右的点覆盖。这里可以用一种很简单的方式来表示\(mask2\)中的点及其左右:\(mask2|mask2<<1|mask2>>1​\)。

然后转移一下就很简单了。

【Codeforces 111C】Petya and Spiders的更多相关文章

  1. codeforces 111C/112E Petya and Spiders

    题目: Petya and Spiders传送门: http://codeforces.com/problemset/problem/111/C http://codeforces.com/probl ...

  2. 【Codeforces 1042D】Petya and Array

    [链接] 我是链接,点我呀:) [题意] 题意 [题解] 把a[i]处理成前缀和 离散化. 枚举i从1..n假设a[i]是区间和的a[r] 显然我们需要找到a[r]-a[l]<t的l的个数 即a ...

  3. 【codeforces 415D】Mashmokh and ACM(普通dp)

    [codeforces 415D]Mashmokh and ACM 题意:美丽数列定义:对于数列中的每一个i都满足:arr[i+1]%arr[i]==0 输入n,k(1<=n,k<=200 ...

  4. 【codeforces 707E】Garlands

    [题目链接]:http://codeforces.com/contest/707/problem/E [题意] 给你一个n*m的方阵; 里面有k个联通块; 这k个联通块,每个连通块里面都是灯; 给你q ...

  5. 【codeforces 707C】Pythagorean Triples

    [题目链接]:http://codeforces.com/contest/707/problem/C [题意] 给你一个数字n; 问你这个数字是不是某个三角形的一条边; 如果是让你输出另外两条边的大小 ...

  6. 【codeforces 709D】Recover the String

    [题目链接]:http://codeforces.com/problemset/problem/709/D [题意] 给你一个序列; 给出01子列和10子列和00子列以及11子列的个数; 然后让你输出 ...

  7. 【codeforces 709B】Checkpoints

    [题目链接]:http://codeforces.com/contest/709/problem/B [题意] 让你从起点开始走过n-1个点(至少n-1个) 问你最少走多远; [题解] 肯定不多走啊; ...

  8. 【codeforces 709C】Letters Cyclic Shift

    [题目链接]:http://codeforces.com/contest/709/problem/C [题意] 让你改变一个字符串的子集(连续的一段); ->这一段的每个字符的字母都变成之前的一 ...

  9. 【Codeforces 429D】 Tricky Function

    [题目链接] http://codeforces.com/problemset/problem/429/D [算法] 令Si = A1 + A2 + ... + Ai(A的前缀和) 则g(i,j) = ...

随机推荐

  1. php中mysql和mysqli的总结

    首先php—mysql 是 php 操作 mysql 资料库最原始的的拓展 而php—mysqli,字母i代表的 Improvement ,提更了相对进阶的功能. 推荐学习和使用mysqli mysq ...

  2. js之全选即点击全选标签可选择全部复选框

    目标效果:网页全选功能,即点击全选标签可选择全部复选框 实现代码如下 <!DOCTYPE html> <html lang="en"> <head&g ...

  3. 2017-11-26 编程语言试验之Antlr4+Java实现"圈2"

    "中文编程"知乎专栏原文 此文涉及的源码版本: program-in-chinese/quan2 声明 代码来源 How to Create Language Using Antl ...

  4. CSS中的行内元素和块级元素

    我们在构造页面时,会发现有的元素是上下排列的,而有的则是横向排列的,这是为啥子呢   看看上图,我们也没给他设置啥子属性咋就不一样了,其实是因为每个元素都有默认的 display 属性,比如 div ...

  5. 【代码笔记】Web-ionic-表单和输入框

    一,效果图. 二,代码. <!DOCTYPE html> <html> <head> <meta charset="utf-8"> ...

  6. IDEA项目搭建九——MybatisPlus多数据库实现

    一.简介 MybatisPlus中引用多数据库时,传统的配置就失效了,需要单独写配置来实现,下面就说一下具体应该如何操作 二.引入MybatisPlus多数据源配置 还是先看一下我的项目结构,Mode ...

  7. Ansible--常用模块使用(2)

    Ansible常用模块 cron 模块 用途:cron模块⽤于设置定时任务,也⽤于管理定时任务中的环境变量使用方法: [root@ansible ~]# ansible-doc -s cron - n ...

  8. android一个倾斜的TextView,适用于标签效果

    描述: android一个倾斜的TextView,适用于标签效果 应用截图: 使用说明: <com.haozhang.lib.SlantedTextView android:layout_wid ...

  9. (网页)js常见报错之Unexpected token in JSON at position

    出现这个报错提示,根本原因只有一个--json解析异常,所以请大家直接去关注自己json的返回数据注意检查其返回内容和内容的格式是否正确,至于本文血案的导火索是因为json注释滴问题.

  10. Linux vsftd配置文件

    vi /etc/vsftpd.conf listen=YES userlist_deny=NO userlist_enable=YES anonymous_enable=YES local_enabl ...