【XSY2733】Disembrangle DP
题目描述
有一个\(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的更多相关文章
- LG4719 【模板】动态dp 及 LG4751 动态dp【加强版】
题意 题目描述 给定一棵\(n\)个点的树,点带点权. 有\(m\)次操作,每次操作给定\(x,y\),表示修改点\(x\)的权值为\(y\). 你需要在每次操作之后求出这棵树的最大权独立集的权值大小 ...
- 【专题】数位DP
[资料] ★记忆化搜索:数位dp总结 之 从入门到模板 by wust_wenhao 论文:浅谈数位类统计问题 数位计数问题解法研究 [记忆化搜索] 数位:数字从低位到高位依次为0~len-1. 高位 ...
- 洛谷P4719 【模板】"动态 DP"&动态树分治
[模板]"动态 DP"&动态树分治 第一道动态\(DP\)的题,只会用树剖来做,全局平衡二叉树什么的就以后再学吧 所谓动态\(DP\),就是在原本的\(DP\)求解的问题上 ...
- LG5056 【模板】插头dp
题意 题目背景 ural 1519 陈丹琦<基于连通性状态压缩的动态规划问题>中的例题 题目描述 给出n*m的方格,有些格子不能铺线,其它格子必须铺,形成一个闭合回路.问有多少种铺法? 输 ...
- 【专题】区间dp
1.[nyoj737]石子合并 传送门:点击打开链接 描述 有N堆石子排成一排,每堆石子有一定的数量.现要将N堆石子并成为一堆.合并的过程只能每次将相邻的两堆石子堆成一堆,每次合并花费的代价为这 ...
- 【BZOJ4976】宝石镶嵌 DP
[BZOJ4976]宝石镶嵌 Description 魔法师小Q拥有n个宝石,每个宝石的魔力依次为w_1,w_2,...,w_n.他想把这些宝石镶嵌到自己的法杖上,来提升法杖的威力.不幸的是,小Q的法 ...
- NOJ 1111 保险箱的密码 【大红】 [区间dp]
传送门 保险箱的密码 [大红] 时间限制(普通/Java) : 1000 MS/ 3000 MS 运行内存限制 : 65536 KByte总提交 : 118 测 ...
- 【CF480D】Parcels DP
[CF480D]Parcels 题意:有一个栈,有n个物品,每个物品可以选或不选.如果选了第i个物品,则获得$v_i$的收益,且第i个物品必须在$in_i$时刻入栈,$out_i$时刻出栈.每个物品还 ...
- 【BZOJ4621】Tc605 DP
[BZOJ4621]Tc605 Description 最初你有一个长度为 N 的数字序列 A.为了方便起见,序列 A 是一个排列. 你可以操作最多 K 次.每一次操作你可以先选定一个 A 的一个子串 ...
随机推荐
- Python全栈开发之路 【第十七篇】:jQuery的位置属性、事件及案例
位置属性 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <titl ...
- 简单QR分解之Gram-Schmit正交化&&Householder变换&&Givens Rotation变换&&计算步骤
- 实现h5中radio单击取消与选中
<input type = "radio" id = "raid" name = "raname" checked = 'checke ...
- Linux下查看文件系统磁盘使用
[root@localhost ~]# df -h 可以查看所有文件系统的磁盘使用情况 du --max-depth=1 -h 可以查看当前目录下各子目录的磁盘使用情况 参考:http://www.2 ...
- Python_匿名函数
匿名函数:为了解决那些功能很简单的需求而设计的一句话函数. 代码如下: 1 正常函数: 2 3 def calc(n): 4 5 return n ** n 6 7 print(calc(10)) 8 ...
- Python_面向对象_单例模式
class A(object): pass a1 = A() a2 = A() print(a1 == a2)print(id(a1))print(id(a2)) 结果: False 23257231 ...
- @SuppressWarnings("resource")
Suppress 抑制:镇压:废止 Warnings警告 @SuppressWarnings("resource")是J2SE 提供的一个批注.该批注的作用是给编译器一条指令,告 ...
- 【学习总结】GirlsInAI ML-diary day-1-初识Python-Anaconda-Jupyter
[学习总结]GirlsInAI ML-diary 总 原博github链接-day1 初识Python-Anaconda-Jupyter: 1-下载并安装Anaconda 官网下载,按指导安装 ana ...
- 爬虫——xpath
1.什么是xpath? Xpath,全称XML Path Language,即XML路径语言.它是一门在XML之后查找信息的语言,也同样适用于HTML文档的搜索.在做爬虫的时候,我们用XPath语言来 ...
- python之路-列表、元组、range
一 . 列表 # 列表的定义 列表就是能装对象的对象 在python中用[ ]来描述列表,内部元素用逗号隔开,对数据类型没有要求 索引和切片 lst = ["天龙八部", &quo ...