计数问题小结

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

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

辅助数组篇:

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. c++ istream_iterator ostream_iterator

    istream_iterator/ostream_iterator void stream_iter_odd_even(const string &in_file, const string ...

  2. Vue2.0源码学习(4) - 合并配置

    合并配置 通过之前的源码学习,我们已经了解到了new Vue主要有两种场景,第一种就是在外部主动调用new Vue创建一个实例,第二个就是代码内部创建子组件的时候自行创建一个new Vue实例.但是无 ...

  3. Swagger2简单实用

    前后端分离很好用的api <!--swagger--> <dependency> <groupId>io.springfox</groupId> < ...

  4. linux下用crunch工具生成密码

    crunch是一款linux下的压缩后仅仅38k的小程序,crunch程序在2004年及以前由email为的作者编写mimayin@aciiid.ath.cx,后续版本由bofh28@gmail.co ...

  5. Maven-compiler-plugin 插件编译过程中报缺失get/set方法

    一般都是由于使用了lombok插件导致的 解决方法: 首先将compiler插件版本升级到3.3以上, 查询资料发现说有可能是版本太低导致 在configuration中添加上annotationPr ...

  6. 2021年国内BI厂商推荐_大数据分析工具

    随着互联网大数据时代的不断发展,BI让企业的工作效率变得更高效.BI的功能也随着需求的增长不断地丰富,例如,数据可视化大屏.可视化表格.商业化数据分析.数据地图等.国外的厂商在很多场景下无法满足国内的 ...

  7. 关于python的turtle详解(转载)

    详解文章见turtle--海龟绘图--python3.10.2文档

  8. 详解 c# 克隆

    克隆方法是原型设计模式中必须使用的方式,它将返回一个与当前对象数据一致的对象.正如其名,犹如一个模子雕刻而出.克隆类型分为两种:浅克隆.深克隆. 浅复制就是仅复制类中的值类型成员 深复制就是复制类中的 ...

  9. 错误try……except……else……finally 记录错误logging 抛出错误raise

    1.错误处理机制 try--except--finally 格式: try: 可能出错的代码 except xxx1Error as e: 处理1 except xxx2Error as e: 处理2 ...

  10. GBDT 梯度提升决策树简述

    首先明确一点,gbdt 无论用于分类还是回归一直都是使用的CART 回归树.不会因为我们所选择的任务是分类任务就选用分类树,这里面的核心是因为gbdt 每轮的训练是在上一轮的训练的残差基础之上进行训练 ...