计数问题小结

很多计数问题在直接拆分计算贡献时都会出现不容易直接表示的情况。
在解决这些问题时,往往需要解决一些子问题方案数的递推,

再套用组合数或者分块计算来降低难度或时间复杂度,这里给出几种递推方法。

辅助数组篇:

1.数的拆分

对于整数的拆分如$3=3=1+2=1+1+1$可以$O(n^2)$跑 完全背包

然而这样只在无任何限制条件下才能的通的方法。

对于一个整数$m$,可以将其拆分数分解为对于每个拆分数个数的累和,所以有:

设$\Large f_{(i,j)}$表示用$i$个数来凑成j的方案数,其中,要求最小的数不能小于k。

递推式

$\Large f_{(i,j)}=f_{(i-1,j-k)}+f_{(i,j-k)}$

2.染色计数

一共i种颜色涂j个格子,答案为$\Large j!g_{i,j}$

其中:$\Large g_{i,j}=g_{i-1,j-1}+j*g_{i-1,j}$

若相邻不能相同,那么$\Large g_{i,j}=g_{i-1,j-1}+(j-1)*g_{i-1,j}$

若每次调用$g_{i,j}$时$j$都不变,那么可以将原式降维为$f_{i}$表示长为n的序列染成i种颜色。

则:$\Large f_i=i^n-\sum\limits_{j=1}^{i-1}C_{i}^{j}{f_{j}}$(任选-只选1个-只选2个...)

3.排列计数

考虑前i个数的排列,加入i+1之前的情况和加入之后的状况,这样可以在递推的过程中考虑维护数列内部的结构,

其放置方法就是在i+1个空中插入,利用空的个数来转移。在破坏结构时在另一维同时进行计数,以待之后更安全的数来补全结构。

最后对某种结构的数列进行计数。

例如:统计一个1~n的排列,要求其中相邻的数差不为一。

考虑i+1加入数列时只能在与i相邻时破坏其结构。

那么就维护一个状态$f[i][j][0/1]$表示前i个数的排列有j个不合法位置和i与i-1相邻/不相邻

$f[i][j][0]$就能够转移到$f[i+1][j+1][1]$,$f[i+1][j][0]$,$f[i+1][j-1][0]$,系数分别为2,i-j-1,j

$f[i][j][1]$就能转移到$f[i+1][j+1][1]$,$f[i+1][j][1]$,$f[i+1][j-1][0]$,$f[i+1][j+1][0]$系数分别为:1,1,j-1,i-j

最新文章

  1. JS组件系列——Bootstrap文件上传组件:bootstrap fileinput
  2. OS X Yosemite Beta体验
  3. 自己封装个ajax
  4. mybatis 3的TypeHandler解析(null值的处理)
  5. 新手该学习Python2.x版本还是3.x版本
  6. 微软Hololens学院教程-Hologram 220-空间声音(Spatial sound )【本文是老版本,与最新的微软教程有出入】
  7. bzoj2242: [SDOI2011]计算器 && BSGS 算法
  8. 计划任务实现定时备份mysql数据库
  9. 学习selenium所须要具备的技术
  10. leetcode Longest Valid Parentheses python
  11. 网络编程应用:基于TCP协议【实现一个聊天程序】
  12. URI和URL差别以及相对路径和绝对路径的差别
  13. SendCloud邮件中为什么会显示代发
  14. js 调用后台,后台调用js
  15. Excel文件读取的两种方式
  16. 【读书笔记】iOS-手势识别
  17. nodejs xpath
  18. <顺序访问><随机访问><HDFS>
  19. gradlew 命令行 build 调试 构建错误 Manifest merger failed MD
  20. Parse how to write flash in uefi shell.

热门文章

  1. LNMP 架构 与 部署 uwsgi 服务
  2. 前端生成PDF,让后端刮目相看
  3. showdoc升级问题,showdoc错误日志
  4. github push时提示Username for 'https://github.com' 解决办法
  5. SevenZip.SevenZipLibraryException: Can not load 7-zip library or internal COM error! Message: failed to load library.
  6. 来宾账户被视为安全威胁,Windows Server 2012 R2禁用Guest账户
  7. Java课程设计---Eclipse基本环境配置
  8. Qt:使用SqlQuery进行查询时size总是-1
  9. Qt:QVariant
  10. Python:Python2和3不同print汉字方式