计数问题小结

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

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

辅助数组篇:

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. 我来教你如何将cpu使用率up起来(shell脚本[含注释])

    这个脚本是为了逃过一些资源检测的,当一些机器当前使用率偏低,会被客户要求收回,那咋办呢?使用下面的脚本,就可以留住你的机器了 假设要求cpu使用率不能低于35% 使用方法:bash up_up_up. ...

  2. Dubbo SPI机制之一JDK中的SPI

    首先简单阐述下什么是SPI:SPI 全称为 (Service Provider Interface) ,是JDK内置的一种服务提供发现机制.目前有不少框架用它来做服务的扩展发现,简单来说,就是一种动态 ...

  3. MyBatis功能点二应用:第三方分页插件使用

    pageHelper分⻚插件使用 在前面文章MyBatis功能点二:plugins插件使用 - 池塘里洗澡的鸭子 - 博客园 (cnblogs.com)中介绍了自定义插件的使用,本文介绍第三方插件pa ...

  4. Swagger2简单实用

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

  5. [LeetCode]1313. 解压缩编码列表

    给你一个以行程长度编码压缩的整数列表 nums . 考虑每对相邻的两个元素 [freq, val] = [nums[2i], nums[2i+1]] (其中 i >= 0 ),每一对都表示解压后 ...

  6. Python中如何取字典中的键值

    1 for k,v in DictName.items(): 2 #遍历字典的键值对,k对应键,v对应值 3 #k,v 的名字可以自己取,DictName是字典名 举例: tv_dict = {'芒果 ...

  7. Wi-Fi DFS与TPC介绍

    DFS与TPC是wifi认证的其中一项测试内容,如果不需要DFS功能,可以不进行测试,但是某些属于DFS频段的wifi信道则不允许使用. 1. 什么是WIFI Auto DFS? 通俗的说就是:躲雷达 ...

  8. “百度杯”CTF比赛 九月场Upload

    首先生成一个php文件以下源代码: <script language="PHP">$fh=fopen("../flag.".strtolower(& ...

  9. 快来用这款BI分析工具,摆脱数据分析的困扰

    ​互联网.物联网时代,数据激增是正常现象,但这给公司信息部门和数据分析师带来了巨大的工作量.根据以前的分析方法,有必要详细而深入地完成分析报告,即使借助数据分析工具,也要花费大量的时间和人力,更不用说 ...

  10. springboot页面国际化

    引入依赖pom.xml <dependency> <groupId>org.springframework.boot</groupId> <artifactI ...