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 ...
随机推荐
- 晚间测试3 B. 单(single)
题目描述 单车联通大街小巷.这就是出题人没有写题目背景的原因. 对于一棵树,认为每条边长度为 \(1\),每个点有一个权值\(a[i]\).\(dis(u,v)\)为点\(u\)到\(v\)的最短路径 ...
- matlab做gaussian高斯滤波
原文链接:https://blog.csdn.net/humanking7/article/details/46826105 核心提示 在Matlab中高斯滤波非常方便,主要涉及到下面两个函数: 函数 ...
- 【题解】CF1426E Rock, Paper, Scissors
题目戳我 \(\text{Solution:}\) 考虑第二问,赢的局数最小,即输和平的局数最多. 考虑网络流,\(1,2,3\)表示\(Alice\)选择的三种可能性,\(4,5,6\)同理. 它们 ...
- [源码阅读] 阿里SOFA服务注册中心MetaServer(1)
[源码阅读] 阿里SOFA服务注册中心MetaServer(1) 目录 [源码阅读] 阿里SOFA服务注册中心MetaServer(1) 0x00 摘要 0x01 服务注册中心 1.1 服务注册中心简 ...
- A4988两相四线步进电机驱动模块使用经验
1.A4988模块可以驱动两相四线步进电机,模块引脚及接线图如下: 2.步进电机引线如下: 3.引脚: ENABLE:低电平有效,用于打开和关闭场效应管的输出: RESET:低电平有效,芯片复位: S ...
- Python+Appium自动化测试(8)-swipe()滑动页面
app自动化测试过程中,经常会遇到滑动屏幕操作,appium框架的话我们可以使用webdriver提供的swipe()方法来对屏幕页面进行上滑.下滑.左滑.右滑操作. 一,swipe方法介绍 swip ...
- SpringBoot整合Mybatis 编译失败:找不到符号 程序包不存在
问题描述:jpa不好用,转用mybatis,配置多数据源 但是配置后无法编译mvn clean install dao层这些报错,找不到entity的包 问题解决:罪魁祸首:热部署的部分 ...
- 多测师讲解selenium _a标签定位()_高级讲师肖sir
shift+ctrl+c 快捷键 调出元素
- C++ concurrent_queue
ConcurrentQueue 用C++11提供的多线程类实现一个线程安全的队列: #include <queue> #include <mutex> #include < ...
- 【动态规划】DP搬运工3
UPD:修了点锅(啊昨天居然写脑抽了) 题目内容 给定两个长度为 \(n\) 的序列,定义 \(magic(A,B)=\sum\limits_{i=1}^n \max(A_i,B_i)\). 现在给定 ...