【XSY2733】Disembrangle DP
题目描述
有一个3×n3\times n的网格,一些格子里已经有棋子了,一些格子里还没有。
每次你可以选择往一个没有棋子的格子里放一个棋子,但要满足这个格子上下两个格子都有棋子或左右两个格子都有棋子。
你的任务是把这个网格填满。问你有几种填法。
n≤2000n\leq 2000
题解
先判无解。
如果四个角没有棋子或在第1/31/3行有两个相邻的空格就无解。
然后DP。
可以对于每个连通块分开DP,然后把结果合并。
可以看出一个连通块只可能通过第22行相邻。
设fi,j,kf_{i,j,k}为前面ii行,(2,i)(2,i)这个格子在前面所有空格中是第jj个放的,(2,i+1)(2,i+1)是否需要在(2,i)(2,i)之前放 的方案数。
转移:枚举(2,i+1)(2,i+1)是在什么时候放的。
设cc为第i+1i+1列两边的空格数。
fi,j,1→fi+1,l,0(l≤j)f_{i,j,1}\rightarrow f_{i+1,l,0}(l\leq j),上下都要先放:A(l−1,c)A(l-1,c)
fi,j,0→fi+1,l,1(l>j)f_{i,j,0}\rightarrow f_{i+1,l,1}(l>j),上下有一个后放:c(l−1)A(cnt−l,c−1)c(l-1)A(cnt-l,c-1),两个都后放:A(cnt−l,2)A(cnt-l,2)
fi,j,0→fi+1,l,0f_{i,j,0}\rightarrow f_{i+1,l,0} ,上下都要先放:A(l−1,c)A(l-1,c)
其中A(n,m)A(n,m)为排列数。
可以用前缀和优化DP。
还要考虑(2,i)(2,i)不是空格但(1,i),(3,i)(1,i),(3,i)是空格的情况。
时间复杂度:O(n2)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相关推荐
- P4719 【模板】“动态 DP“动态树分治(矩阵/轻重链剖分/ddp)
P4719 [模板]"动态 DP"&动态树分治 求解树上最大权独立集,但是需要支持修改. https://www.luogu.com.cn/problem/solution ...
- 全局平衡二叉树 P4751 【模板】“动态DP“
全局平衡二叉树 P4751 [模板]"动态DP" P4751 [模板]"动态DP"&动态树分治(加强版) 有事没事就用 v e c t o r \tt ...
- 【luogu P5056】【模板】插头dp(插头DP)(分类讨论)
[模板]插头dp 题目链接:luogu P5056 题目大意 有一个 n*m 的网格,每个格子要么必须铺线,要么必须不铺. 然后问你有多少个铺发使得形成一个闭合回路. 思路 快乐插头 DP 模板题. ...
- 【动态规划】区间dp: P1063能量项链
本题和合并石子果子一样,都是枚举最后一次合并的点 [动态规划笔记]区间dp:合并果子_m0_52043808的博客-CSDN博客 区别: 1.需要断环为链 2.每一堆石子变为两个值,这里用结构体实现 ...
- 【动态规划】线性dp P1043 数字游戏
思路: 这题和 [动态规划]P1018 线性dp:乘积最大_m0_52043808的博客-CSDN博客 十分类似,都是把一组数分成固定的部分,然后对分好的数进行特定的操作,求操作后所得的最值 所以,两 ...
- 【进阶】数位DP详解
如果想了解更多内容,欢迎关注我的微信公众号:信息学竞赛从入门到巅峰. 戳这里获得更好的阅读体验哦 https://mp.weixin.qq.com/s/eZHoI7RZOvlEhhSNRpGhxA 今 ...
- 【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$时刻出栈.每个物品还 ...
最新文章
- Python基本数据类型之整型
- java调用百度搜索_Java爬虫怎么调用百度搜索引擎,对关键字的网页爬取?
- Tensorflow的高级封装
- 基于 C# 的 ETL 大数据并行编程
- matlab如何绘制传递函数对数幅频特性_开环传递函数是怎样影响系统的?重要参量1/(1+T)与T/(1+T)的释义...
- AMD宣布350亿美元收购赛灵思,CPU、GPU、FPGA全凑齐
- Android开发笔记(八十四)使用Properties读写属性值
- C#仿QQ皮肤—更新DataGridView的鼠标跟随效果
- 数仓建设生命周期_建设数据仓库7个步骤
- 自制简易谷歌翻译器详解(附完整UI界面及代码文件)
- Python实现求众数的三种方法
- Python open()函数 文件打开方法的用法参数总结(全)
- Python读取snappy后缀文件
- [快速学会Swift第三方库] SwiftyJSON篇
- 广义相对论-学习记录3-第二章-狭义相对论2
- 解决win2008远程桌面授权过期的方法
- 和平精英分享码服务器未响应,《和平精英》ss11最稳灵敏度分享码大全
- 黄斑水肿应及时打针+水肿损伤感光层
- C语言标准,ANSI C,ISO C,GNU C
- 做软件项目验收测评,首选专业第三方软件检测机构
热门文章
- 说说在CMD命令行模式下ADB命令显示为不是内部或外部命令,亦不是可运行程序和批处理文件的解决办法
- 什么软件可以测试提速,谁是手机加速神器?三款常用加速软件横评
- 火狐浏览器,错误代码:SEC_ERROR_REUSED_ISSUER_AND_SERIAL
- [转]800个有趣句子帮你记忆7000个单词
- 几个销售术语,折扣、回扣等
- php去除换行符的方法
- 关于字符数组的初始化
- 一分钟搞定最长公共子序列与最长公共子串的问题
- 十三、java类的封装、继承、多态
- LINUX IIO子系统分析之六 iio device的驱动开发流程说明