计数问题小结

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

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

辅助数组篇:

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

jdr挖的大坑的更多相关文章

  1. Fast Fourier Transform

    写在前面的.. 感觉自己是应该学点新东西了.. 所以就挖个大坑,去学FFT了.. FFT是个啥? 挖个大坑,以后再补.. 推荐去看黑书<算法导论>,讲的很详细 例题选讲 1.UOJ #34 ...

  2. 北工大耿丹学院16级计科院3班C语言课程助教学期总结

    很荣幸得到邹老师,周老师,以及北工大耿丹学院各位老师的认可,担任计科院3班C语言课程助教,班主任为李光杰老师,很感谢李老师一学期的帮助,使得我更好的担任助教一职.我班学生31名,很愉快的与同学们度过一 ...

  3. 帮初学者改代码——有多少青春可以挥霍之“c语言 多重排序”

    原文:“c语言 多重排序” 原代码: #include<stdio.h> #include<string.h> struct A { char name[100]; int g ...

  4. JS 学习笔记--5---对象和数组

    1.Object类型(引用类型) 不具备多少功能,但是对于在ECMAScript中存储和传递数据确实,确是很理想的选择. 创建方式:(1).使用new Object();方式创建对象,然后对对象进行设 ...

  5. 【string】KMP, 扩展KMP,trie,SA,ACAM,SAM,最小表示法

    [KMP] 学习KMP,我们先要知道KMP是干什么的. KMP?KMPLAYER?看**? 正如AC自动机,KMP为什么要叫KMP是因为它是由三个人共同研究得到的- .- 啊跑题了. KMP就是给出一 ...

  6. ASP.NET MVC最新特性

    问题: 既然我说对ASP.NET MVC很熟很懂,对新技术很感兴趣,那么问题是: 当前最新版MVC是什么?你用的哪个版本?相比前一个版本有什么新的特性? 解析: 在面试的时候,为了争取面试官的好感,显 ...

  7. loj548 「LibreOJ β Round #7」某少女附中的体育课

    这道题好神啊!!! 发现这题就是定义了一种新的卷积,然后做k+1次卷积. 这里我们就考虑构造一个变换T,使得$T(a) \cdot T(b) =T(a∘b)$,这里是让向量右乘这个转移矩阵. 于是我们 ...

  8. Android:异步处理之Handler+Thread的应用(一)

    前言 很久很久以前就听说了,每一个android的应用程序都会分别运行在一个独立的dalvik虚拟机进程中,而在每个虚拟机在启动时会运行一个UI主线程(Main Thread),而为啥叫UI主线程而不 ...

  9. 机器视觉及图像处理系列之一(C++,VS2015)——搭建基本环境

    自<人脸识别>系列发布至今,已一年多矣,期间除答复些许同好者留言外,未再更新文,盖因项目所迫,不得已转战它途,无暇.无料更博耳.其时,虽人已入项目中,然终耿怀于人脸识别方案之谬.初,写此文 ...

随机推荐

  1. Solution -「Ynoi 2018」「洛谷 P4117」五彩斑斓的世界

    \(\mathcal{Description}\)   Link.   给定序列 \(\{a_n\}\),处理 \(m\) 次操作: 给定 \(l,r,x\),把 \([l,r]\) 内所有 \(&g ...

  2. Solution -「Gym 102798I」Sean the Cuber

    \(\mathcal{Description}\)   Link.   给定两个可还原的二阶魔方,求从其中一个状态拧到另一个状态的最小步数.   数据组数 \(T\le2.5\times10^5\). ...

  3. WMI简介和Event驻留

      WMI (Windows Management Instrumentation,Windows管理规范) 从Windows 2000开始被包含于操作系统后,就一直是Windows操作系统的一部分. ...

  4. PHP7.x环境下安装redis扩展

    注:以下介绍的安装方式为PHP的安装路径为/usr/local/php,如果你的服务器上PHP的安装目录不一致请按实际情况处理. 首先下载PHP7的redis扩展 wget https://githu ...

  5. JUC并发工具类之Semaphore控制并发线程数

    首先看看关于Semaphore的UML图: 从上图看,信号量的实现原理与锁类似,是基于AQS的:有公平与非公平之分.当初始的资源数为1时就退化为排它锁了,资源总数即state的初始值,在acquire ...

  6. JwtAccessTokenConverter问题整理

    Cannot convert access token to JSON 授权服务颁发token(未进行公私钥加密)后,携带此token请求资源服务,提示此错误. 使用token可以在线解析,跟踪代码后 ...

  7. 【Azure API 管理】API Management如何有效且快速更新呢?如对APIs/Policy等设置内容

    问题描述 APIM中的内容(API, Policy)等内容,如果有需要更新时候,通常可以在Azure APIM门户上操作,通过一个接口一个设置的修改,也可以针对一个接口导入/导出的方式修改.当APIM ...

  8. 02.Oracle之安装与配置

    1.Oracle简介 Oracle是世界上最早的商品化的关系型数据库管理系统,是数据库专业厂商ORACLE(中文名字叫甲骨文)公司开发的,也是当前应用最为广泛.功能最强大.具有面向对象特点.采用了客户 ...

  9. python中time模块的调用及使用

    1 import time #通常import语句会写到代码的开头 2 3 print('------------------------') 4 print('------------------- ...

  10. 攻防世界之Web_php_rce

    题目: ========================================================================== 解题思路: 1.这题主要考查ThinkPH ...