Codeforces 142 C

题意:给一个\(n\times m\)的空矩阵,求里面放最多的可旋转的\(T\)字形的个数,并输出方案。

思路1:

由于\(n\)和\(m\)比较小,所以可以尝试搜索。

对于每一个格子,尝试\(T\)字形的\(4\)种旋转方式,然后看\(T\)字形覆盖到的格子是否已经被覆盖了,如果没有那么就可以进入下一个格子。

这样是会\(TLE\)的。所以考虑最优性剪枝。对于这个格子,如果已经放的\(T\)字形的个数加上后面能放的最多个数(剩下的空格子/5)还不比最佳答案大,那么就不必继续了。

想一想后发现其实我们还能剪掉更多的枝叶。因为\(T\)字形的特殊性,它在放置的时候是不可能把能放的所有格子填满的,而是会浪费一些格子,所以我们有了一个大胆的想法:每个\(T\)字形会实际占据大于5个的格子数,这里通过调参得到6.5个格子的效果最好。所以就这样搜过去了。

思路2:

由于\(n\)和\(m\)比较小,所以可以考虑状态压缩动态规划。

首先假设当前处理到\((x,y)\)格子。我们知道每一个\(T\)字形会占据\(3\times 3\)的空间,然后就可以想到将\((x,y)\)一直到\((x+2,y+2)\)是否被\(T\)字形覆盖的情况都存下,即存\(2\times m+3\)个格子,也不会出现空间或时间不够的情况。

然后就可以想出\(dp\)状态和转移方程了:\(dp(x,y,mask)\)按照之前所说,考虑到\((x,y)\)这个格子,\((x,y)\)到\((x+2,y+2)\)的覆盖情况在\(mask\)中,最多放的\(T\)字形数量。

方程也就是考虑这里\(T\)字形放哪一种旋转的方式,将\(mask\)中相应的位置更改是否被覆盖的状态,注意需要判断一下是否原来没有被覆盖,如果已经被覆盖了就不能放。

最后就是要输出方案的问题了。

有两种方式:

  • 像正常的\(dp\)一样对于每一个状态记录\(prev\)表示当前状态从哪一个状态转移来,从初始状态一直通过\(prev\)走到最终状态。
  • 类似于重做一遍\(dp\),看当前的最大值由哪一个状态转移而来,然后一直走到最终状态。

【Codeforces 142C】Help Caretaker的更多相关文章

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

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

  2. 【codeforces 707E】Garlands

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

  3. 【codeforces 707C】Pythagorean Triples

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

  4. 【codeforces 709D】Recover the String

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

  5. 【codeforces 709B】Checkpoints

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

  6. 【codeforces 709C】Letters Cyclic Shift

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

  7. 【Codeforces 429D】 Tricky Function

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

  8. 【Codeforces 670C】 Cinema

    [题目链接] http://codeforces.com/contest/670/problem/C [算法] 离散化 [代码] #include<bits/stdc++.h> using ...

  9. 【codeforces 515D】Drazil and Tiles

    [题目链接]:http://codeforces.com/contest/515/problem/D [题意] 给你一个n*m的格子; 然后让你用1*2的长方形去填格子的空缺; 如果有填满的方案且方案 ...

随机推荐

  1. IDEA项目搭建八——使用MybatisPlus简化数据库交互

    一.MybatisPlus简化数据库交互 我们使用Mybatis发现需要在mapper.xml中写很多重复的简单CRUD(增删改查),使用MybatisPlus可以大大简化这部分代码,官方文档http ...

  2. Linux 下Shell变量,环境变量的联系与区别

    Linux下Shell变量,环境变量的联系与区别 by:授客 QQ:1033553122 1.  简介 linux下的变量可分成两种:Shell变量和环境变量. Shell变量,又称本地变量,包括私有 ...

  3. engineecms——工程师知识管理系统,带文档协作和状态和流程

    工程师们工作的平台,需要对图纸资料按工程项目名称,按工程项目阶段,按参与设计的专业等来分放. 而设计成果需要进行校审,才能算最终成果,也就是要具备状态和流程功能,这个一般网盘资源存储是做不到的. 一些 ...

  4. 浅谈Java多线程中的join方法

    先上代码 新建一个Thread,代码如下: package com.thread.test; public class MyThread extends Thread { private String ...

  5. Runtime消息动态解析与转发流程

    先上图: 下面根据具体代码看这张图. 一.创建一个Person类, Person.h #import <Foundation/Foundation.h> @interface Person ...

  6. python网络编程:socket、服务端、客户端

    本文内容: socket介绍 TCP: 服务端 客户端 UDP: 服务端 客户端 首发时间:2018-02-08 01:14 修改: 2018-03-20 :重置了布局,增加了UDP 什么是socke ...

  7. Git的安装配置(win环境)

    安装: 首先安装win版本的git msysgit:https://git-for-windows.github.io 注:安装时要勾选生成桌面快捷方式. 默认安装完后依次执行: $ git conf ...

  8. [转]Docker容器可视化监控中心搭建

    [原文链接]https://www.jianshu.com/p/9e47ffaf5e31?hmsr=toutiao.io&utm_medium=toutiao.io&utm_sourc ...

  9. 洗礼灵魂,修炼python(29)--装饰器(1)—>利用经典案例解析装饰器概念

    前提必备 不急着进入正题,在前面函数作用域那一章介绍了闭包,全局变量局部变量,这里再看几个简单的闭包案例: 1):不带参数 注意: 1.这里的name属性是每个函数都有的,可以反馈函数名 2.temp ...

  10. centos7安装rabbitmq 总结

    centos7下安装rabbitmq 折腾了三天最后做了以下总结 先查看一电脑名  :示例 #hostname name 查看一下hosts配置文件:如果如下结果,就要修改下 #cat /etc/ho ...