题目描述

  有一个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相关推荐

  1. P4719 【模板】“动态 DP“动态树分治(矩阵/轻重链剖分/ddp)

    P4719 [模板]"动态 DP"&动态树分治 求解树上最大权独立集,但是需要支持修改. https://www.luogu.com.cn/problem/solution ...

  2. 全局平衡二叉树 P4751 【模板】“动态DP“

    全局平衡二叉树 P4751 [模板]"动态DP" P4751 [模板]"动态DP"&动态树分治(加强版) 有事没事就用 v e c t o r \tt ...

  3. 【luogu P5056】【模板】插头dp(插头DP)(分类讨论)

    [模板]插头dp 题目链接:luogu P5056 题目大意 有一个 n*m 的网格,每个格子要么必须铺线,要么必须不铺. 然后问你有多少个铺发使得形成一个闭合回路. 思路 快乐插头 DP 模板题. ...

  4. 【动态规划】区间dp: P1063能量项链

    本题和合并石子果子一样,都是枚举最后一次合并的点 [动态规划笔记]区间dp:合并果子_m0_52043808的博客-CSDN博客 区别: 1.需要断环为链 2.每一堆石子变为两个值,这里用结构体实现 ...

  5. 【动态规划】线性dp P1043 数字游戏

    思路: 这题和 [动态规划]P1018 线性dp:乘积最大_m0_52043808的博客-CSDN博客 十分类似,都是把一组数分成固定的部分,然后对分好的数进行特定的操作,求操作后所得的最值 所以,两 ...

  6. 【进阶】数位DP详解

    如果想了解更多内容,欢迎关注我的微信公众号:信息学竞赛从入门到巅峰. 戳这里获得更好的阅读体验哦 https://mp.weixin.qq.com/s/eZHoI7RZOvlEhhSNRpGhxA 今 ...

  7. 【BZOJ4976】宝石镶嵌 DP

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

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

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

  9. 【CF480D】Parcels DP

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

最新文章

  1. Python基本数据类型之整型
  2. java调用百度搜索_Java爬虫怎么调用百度搜索引擎,对关键字的网页爬取?
  3. Tensorflow的高级封装
  4. 基于 C# 的 ETL 大数据并行编程
  5. matlab如何绘制传递函数对数幅频特性_开环传递函数是怎样影响系统的?重要参量1/(1+T)与T/(1+T)的释义...
  6. AMD宣布350亿美元收购赛灵思,CPU、GPU、FPGA全凑齐
  7. Android开发笔记(八十四)使用Properties读写属性值
  8. C#仿QQ皮肤—更新DataGridView的鼠标跟随效果
  9. 数仓建设生命周期_建设数据仓库7个步骤
  10. 自制简易谷歌翻译器详解(附完整UI界面及代码文件)
  11. Python实现求众数的三种方法
  12. Python open()函数 文件打开方法的用法参数总结(全)
  13. Python读取snappy后缀文件
  14. [快速学会Swift第三方库] SwiftyJSON篇
  15. 广义相对论-学习记录3-第二章-狭义相对论2
  16. 解决win2008远程桌面授权过期的方法
  17. 和平精英分享码服务器未响应,《和平精英》ss11最稳灵敏度分享码大全
  18. 黄斑水肿应及时打针+水肿损伤感光层
  19. C语言标准,ANSI C,ISO C,GNU C
  20. 做软件项目验收测评,首选专业第三方软件检测机构

热门文章

  1. 说说在CMD命令行模式下ADB命令显示为不是内部或外部命令,亦不是可运行程序和批处理文件的解决办法
  2. 什么软件可以测试提速,谁是手机加速神器?三款常用加速软件横评
  3. 火狐浏览器,错误代码:SEC_ERROR_REUSED_ISSUER_AND_SERIAL
  4. [转]800个有趣句子帮你记忆7000个单词
  5. 几个销售术语,折扣、回扣等
  6. php去除换行符的方法
  7. 关于字符数组的初始化
  8. 一分钟搞定最长公共子序列与最长公共子串的问题
  9. 十三、java类的封装、继承、多态
  10. LINUX IIO子系统分析之六 iio device的驱动开发流程说明