Ideas and Tricks Part II
33.对于统计答案幂次的技巧
对于$x^k$,考虑其组合意义:将$k$个不同球放到$x$个不同的盒子里的方案数,直接维护不好维护,那么考虑枚举把这些球放到了哪些盒子里,最后乘上第二类斯特林数和对于的阶乘(保证盒子有序),可以利用一个dp来统计,每次转移的时候考虑是否选择这个盒子$x$
然后这个做法相当于维护了答案的下降幂,由于下降幂优秀的性质
$(x+1)^{\underline{m}}= x^{\underline{m}}+mx^{\underline{m-1}}$
最后利用第二类斯特林数将下降幂转化为普通幂即可
34.解递归式$f_x=af_{x-i}+bf_{x-j}$
考虑其组合意义,相当于是爬楼梯,每一次可以走$i$步代价为$a$,或者走$j$步代价为$b$,总代价为每一步代价的乘积,然后问所有走到$n$的方案的代价总和为多少
可以枚举其中一种步走了多少次
$\sum_{k=0}^{\lfloor \frac{n}{i} \rfloor} [j|n-ik]a^kb^{\frac{n-ik}{j}}\binom{k+\frac{n-ik}{j}}{k}$
当然如果代价是每一步之和也是同理
35.吉司机线段树
势能函数啥的我也没听懂,不管他
吉司机线段树以其优秀的性质可以维护各种duliu信息
然而我只会区间$max/min$(我觉得就这个有点用吧)
以取$min$为例,就是在线段树中维护最大值$MAX_0$,次大值$MAX_1$和相应出现的次数,注意此处的次大值是要严格小于最大值的(如果不存在次大值那么可以将其赋为$-inf$)
当每次更新的时候检查当前节点设当前需要取$min$的是$t$
如果$t \geq MAX_0$那么说这个区间什么也不会发生,那么直接返回
如果 $t \leq MAX_1$那么说明更新的区间内会变化的数不止一个,那么继续递归下去
如果$ MAX_1 < t < MAX_0 $那么这个区间内会被更新的数只有$MAX_0$一个数,那么直接打上减法标记,然后修改$MAX_0$的值为$t$
时间复杂度大概感性理解一下
就是区间取$min$操作会使序列中的数趋于相同,每一次第三种操作更新的时候更新一个数,然后第二种情况递归下去,肯定会减少区间中不同数的数量,这样的区间每次询问最多$log$个,那么就是$nlogn$的复杂度
如果要区间加减,那么就是$log^2n$
36.DP转移状态有互相转移的情况
即DP转移建出来的图里面有环的情况
一句话:利用最短路思想,先把DP的初始状态放入堆中,然后利用状态之间的关系进行转移,跑最短路即可
其实就是废话
37.$(x_1+x_2+...+x_n)^k \equiv x_1^k+x_2^k+...+ x_n^k(\mod k)$k为质数
$\\ \equiv \sum_{\sum k_i=k} \binom{k}{k_1,k_2,...,k_n}x_1^{k_1}x_2^{k_2}...x_n^{k_n}$
$\\ \equiv \sum_{\sum k_i=k} \frac{k!}{k_1!k_2!...k_n!}x_1^{k_1}x_2^{k_2}...x_n^{k_n}$
如果$k_1,k_2,...,k_n$中不存在一个$k_i=k$那么系数中一定存在$k$这个因子,那么取模之后系数就变为$0$
那么上式得证
38.状压DP的优化
对于一些分层枚举的状压DP,往往是需要枚举子集进行转移,时间复杂度为$O(3^n)$
有一种方法可以优化到$O(n2^n)$,枚举子集可以换成尝试将一个点一个点加入到集合中,可以做$0/1$背包来进行转移,但空间需要多开一维
39.拆分数优化DP
对于一些指数级别的DP,可以转化枚举某一个集合中具体是哪些元素为枚举集合的大小,当然这是在保证集合中的数是等价的情况,然后这个DP复杂度就变为拆分数级别的复杂度,一般来说可以跑$40-50$的数据规模
40.询问集合中第$k$大/小
就是给定一种生成某一集合的方法,一般是给出一个序列每一个数可选可不选,问集合中第$k$大的数是多少,往往这个集合是巨大的(指数级别),有一种方法可以从小到大构造出集合中的数
先把序列排好序
设二元组$(sum,id)$表示当前操作出来的数为$sum$,并且当前考虑到序列中第$id$个数的状态,并且第$id$个数必选
然后可以进行转移
$(sum,id)\rightarrow (sum+a[id+1],id+1)$
$(sum,id)\rightarrow (sum+a[id+1]-a[id],id+1)$
相当于是进行$0/1$背包的过程,这个二元组可以用堆来进行维护
如果可以选多个,那么多一个转移
$(sum,id)\rightarrow (sum+a[id],id)$
相当于在做无限背包
再拓展如果每一个数有一个选择上限,那么需要用三元组来记录状态即$(sum,cnt,id)$其中多出来的$cnt$表示当前这个数选了$cnt$次,其他转移同理进行即可
再再拓展每一个数有一个下限和上限,那么在三元组的基础上,在进行转移到下个数的时候,选下限个数即可,就可以保证满足限制了
Ideas and Tricks Part II的更多相关文章
- Ideas and Tricks
1.树上拓扑排序计数 结论$\dfrac{n!}{\prod\limits_{i=1}^n size_i}$ 对于节点$i$,其子树随意排序的结果是$size[i]!$ 但$i$需要排在第一位,只有$ ...
- USB hacker Collection
This blog contains some ideas and tricks about USB hacking.
- Recurrent Neural Network系列2--利用Python,Theano实现RNN
作者:zhbzz2007 出处:http://www.cnblogs.com/zhbzz2007 欢迎转载,也请保留这段声明.谢谢! 本文翻译自 RECURRENT NEURAL NETWORKS T ...
- 34 Sources for Test Ideas
We recommend collecting test ideas continuously from a variety of information sources. Consider the ...
- 10 Interesting Linux Command Line Tricks and Tips Worth Knowing
I passionately enjoy working with commands as they offer more control over a Linux system than GUIs( ...
- PID控制器(比例-积分-微分控制器)- II
Table of Contents Practical Process Control Proven Methods and Best Practices for Automatic PID Cont ...
- Blog Ideas
Blog Ideas How-to Post Case Studies Product + Service Updates Product Reviews Content Survey Current ...
- Leetcode 笔记 113 - Path Sum II
题目链接:Path Sum II | LeetCode OJ Given a binary tree and a sum, find all root-to-leaf paths where each ...
- Leetcode 笔记 117 - Populating Next Right Pointers in Each Node II
题目链接:Populating Next Right Pointers in Each Node II | LeetCode OJ Follow up for problem "Popula ...
随机推荐
- 【小白学PyTorch】19 TF2模型的存储与载入
[新闻]:机器学习炼丹术的粉丝的人工智能交流群已经建立,目前有目标检测.医学图像.时间序列等多个目标为技术学习的分群和水群唠嗑的总群,欢迎大家加炼丹兄为好友,加入炼丹协会.微信:cyx64501661 ...
- Java (一)下载APACHE Commons IO
一,进入APACHE的官网,在首页往下找APACHE PROJECT LIST > Commons,点击进入. 二,进入Apache Commons页面,找IO组件,点击进入. 三.点击链接Do ...
- 在Linux下如何根据域名自签发OpenSSL证书与常用证书转换
在Linux下如何根据域名自签发各种SSL证书,这里我们以Apache.Tomcat.Nginx为例. openssl自签发泛域名(通配符)证书 首先要有openssl工具,如果没有那么使用如下命令安 ...
- idea报“Cannot resolve symbol XXX”错误
解决方案
- fastjson配置序列化过滤转换
@Configuration@EnableWebMvcpublic class WebConfig implements WebMvcConfigurer { @Override public voi ...
- shell-批量修改文件名及扩展名多案例
1. 功能描述如下表: 批量文件改名案例实战: 问题1: 创建测试数据 [root@1-241 tmp]# for i in `seq 6`;do touch stu_161226_${i}_fin ...
- devops-jenkins-Pipeline实战
1) 配置gitlab的分支项目 点击红色标记的创建 project 项目 点击Create project创建Pipeline-demo项目 项目创建完成,然后我们创建一个Add README 然后 ...
- LCA树上倍增求法
1.LCA LCA就是最近公共祖先(Least common ancestor),x,y的LCA记为z=LCA(x,y),满足z是x,y的公共祖先中深度最大的那一个(即离他们最近的那一个)qwq 2. ...
- 利用RNN进行中文文本分类(数据集是复旦中文语料)
利用TfidfVectorizer进行中文文本分类(数据集是复旦中文语料) 1.训练词向量 数据预处理参考利用TfidfVectorizer进行中文文本分类(数据集是复旦中文语料) ,现在我们有了分词 ...
- python文件管道 下载图集
# -*- coding: utf-8 -*- import re from time import sleep import scrapy from scrapy.linkextractors im ...