题目描述

  有一个\(3\times n\)的网格,一些格子里已经有棋子了,一些格子里还没有。

  每次你可以选择往一个没有棋子的格子里放一个棋子,但要满足这个格子上下两个格子都有棋子或左右两个格子都有棋子。

  你的任务是把这个网格填满。问你有几种填法。

  \(n\leq 2000\)

题解

  先判无解。

  如果四个角没有棋子或在第\(1/3\)行有两个相邻的空格就无解。

  然后DP。

  可以对于每个连通块分开DP,然后把结果合并。

  可以看出一个连通块只可能通过第\(2\)行相邻。

  设\(f_{i,j,k}\)为前面\(i\)行,\((2,i)\)这个格子在前面所有空格中是第\(j\)个放的,\((2,i+1)\)是否需要在\((2,i)\)之前放 的方案数。

  转移:枚举\((2,i+1)\)是在什么时候放的。

  设\(c\)为第\(i+1\)列两边的空格数。

  \(f_{i,j,1}\rightarrow f_{i+1,l,0}(l\leq j)\),上下都要先放:\(A(l-1,c)\)

  \(f_{i,j,0}\rightarrow f_{i+1,l,1}(l>j)\),上下有一个后放:\(c(l-1)A(cnt-l,c-1)\),两个都后放:\(A(cnt-l,2)\)

  $f_{i,j,0}\rightarrow f_{i+1,l,0} \(,上下都要先放:\)A(l-1,c)$

  其中\(A(n,m)\)为排列数。

  可以用前缀和优化DP。

  还要考虑\((2,i)\)不是空格但\((1,i),(3,i)\)是空格的情况。

  时间复杂度:\(O(n^2)\)

代码

$f_{i,j,1}\rightarrow f_{i+1,l,0}(l\leq j)$,上下要先放:$A(l-1,c)$

$f_{i,j,0}\rightarrow f_{i+1,l,1}(l>j)$,上下至少有一个没放:$c(l-1)A(cnt-l,c-1)$

$f_{i,j,0}\rightarrow f_{i+1,l,0}$,上下先放:$A(l-1,c)$

【XSY2733】Disembrangle DP的更多相关文章

  1. LG4719 【模板】动态dp 及 LG4751 动态dp【加强版】

    题意 题目描述 给定一棵\(n\)个点的树,点带点权. 有\(m\)次操作,每次操作给定\(x,y\),表示修改点\(x\)的权值为\(y\). 你需要在每次操作之后求出这棵树的最大权独立集的权值大小 ...

  2. 【专题】数位DP

    [资料] ★记忆化搜索:数位dp总结 之 从入门到模板 by wust_wenhao 论文:浅谈数位类统计问题 数位计数问题解法研究 [记忆化搜索] 数位:数字从低位到高位依次为0~len-1. 高位 ...

  3. 洛谷P4719 【模板】"动态 DP"&动态树分治

    [模板]"动态 DP"&动态树分治 第一道动态\(DP\)的题,只会用树剖来做,全局平衡二叉树什么的就以后再学吧 所谓动态\(DP\),就是在原本的\(DP\)求解的问题上 ...

  4. LG5056 【模板】插头dp

    题意 题目背景 ural 1519 陈丹琦<基于连通性状态压缩的动态规划问题>中的例题 题目描述 给出n*m的方格,有些格子不能铺线,其它格子必须铺,形成一个闭合回路.问有多少种铺法? 输 ...

  5. 【专题】区间dp

    1.[nyoj737]石子合并 传送门:点击打开链接 描述    有N堆石子排成一排,每堆石子有一定的数量.现要将N堆石子并成为一堆.合并的过程只能每次将相邻的两堆石子堆成一堆,每次合并花费的代价为这 ...

  6. 【BZOJ4976】宝石镶嵌 DP

    [BZOJ4976]宝石镶嵌 Description 魔法师小Q拥有n个宝石,每个宝石的魔力依次为w_1,w_2,...,w_n.他想把这些宝石镶嵌到自己的法杖上,来提升法杖的威力.不幸的是,小Q的法 ...

  7. NOJ 1111 保险箱的密码 【大红】 [区间dp]

    传送门 保险箱的密码 [大红] 时间限制(普通/Java) : 1000 MS/ 3000 MS          运行内存限制 : 65536 KByte总提交 : 118            测 ...

  8. 【CF480D】Parcels DP

    [CF480D]Parcels 题意:有一个栈,有n个物品,每个物品可以选或不选.如果选了第i个物品,则获得$v_i$的收益,且第i个物品必须在$in_i$时刻入栈,$out_i$时刻出栈.每个物品还 ...

  9. 【BZOJ4621】Tc605 DP

    [BZOJ4621]Tc605 Description 最初你有一个长度为 N 的数字序列 A.为了方便起见,序列 A 是一个排列. 你可以操作最多 K 次.每一次操作你可以先选定一个 A 的一个子串 ...

随机推荐

  1. 初识Python-1

    1,计算机基础. 2,python历史. 宏观上:python2 与 python3 区别: python2 源码不标准,混乱,重复代码太多, python3 统一 标准,去除重复代码. 3,pyth ...

  2. H5 61-浮动元素贴靠现象

    61-浮动元素贴靠现象 <!DOCTYPE html><html lang="en"><head> <meta charset=" ...

  3. Day2 Python基础之基本操作(一)

    1.常用命令 调用cmd窗口 Win+R cmd命令窗口清屏 cls cmd命令窗口在运行python时清屏 import os i=os.system('cls') cmd命令窗口在运行python ...

  4. spring security运行流程图(转)

    原文:http://blog.csdn.net/u011511684/article/details/31394493 示例下载地址:http://download.csdn.net/detail/u ...

  5. TortoiseGit push免输密码

    (ฅ>ω<*ฅ) 噫又好了~ TortoiseGit push免输密码的方法 – 晨旭的博客~https://www.chenxublog.com/2016/03/04/tortoiseg ...

  6. 四、Object.defineProperty总结

    Object.defineProperty() 参考:https://segmentfault.com/a/1190000007434923 定义: 方法会直接在一个对象上定义一个新属性,或者修改一个 ...

  7. 【Java编译】含package的类文件编译

    含package的类文件编译: package com.zhangxueliang.setdemo; public class Demo1 { public static void main(Stri ...

  8. Laravel技巧:使用load、with预加载 区别

    1.使用load $posts = Post::all(); $posts->load('user'); 2.使用with $posts = Post::with('user')->all ...

  9. 虚拟机安装CentOS7之后没有ip的问题

    CentOS 7 默认是不启动网卡的(ONBOOT=no),主要是修改一下网上配置,然后重起便可,看这篇博客操作: https://blog.csdn.net/dancheren/article/de ...

  10. ES6/ES2015的一些特性的简单使

    1.一些常用的ES6的特性: let, const, class, extends, super, arrow functions, template string, destructuring, d ...