12.19 省选预备班

区间dp

1.石子合并

  区间dp  n3方

  随 i 增加 k 单调不降  优化成 n2

2. cf1025D

  gcd 预处理出来

  n4 f[i][j][k]  区间 i j  以 k 为跟的二叉树是否存在

  n3 f[i][j][0/1]表示区间 i j 根节点在左端还是右端  转移变成 o1

  g[i][j][0/1]  区间 i j  根节点为 i/j 的二叉树是否存在   枚举k 与 j 互质 ,则可以作为根     转移复杂度  O(n)

  二叉树的一个中序遍历对应一个区间

3. 多重背包

  O(nvk)

  单调队列优化

  f[i][j] = f[i-1][j-k*v]+w;

  k*v 相当于一条链   在 %v 意义下  v+p  2*v+p  3*v+p 是相同的

  能转移过来的状态相当于一个区间  随k增加 区间移动

4.整数划分问题

  划分一个数(有序)的方案数

  设 f[i][j] 表示 i 个数拼成了 j 的方案数

  添加一个值为 1 的数 :f[i][j]->f[i+1][j+1]    所有数+1 :f[i][j]->f[i][j+i]   O(n2)

  优化 : 大于 根n 的数最多有 根n 个     钦定 dp 数组中的数全部大于 根n   第一个转移变成了每次添加一个值为 根n 的数   f[i][j]->f[i+1][j+根n] 第一维 根n   O(n sqrt(n));

  小于 根n 的数完全背包一下

  枚举有多少个数大于 根n :  假设 k 个,拼成 L  F[k][L] * f[n-L]    F 第一维用前缀和优化一下   f 是 < 根n 的数的方案数

  根号分块思想   >根n  和  <根n   两种方法做

5. 树形dp

 HAOI 树上染色

  设 i 为根的子树 选了 k 个点   无法转移    不知道染色点选在哪里

  

  枚举每条边  统计每条边的贡献  f[u][k]  枚举在一个子树选了j个黑点  剩 k-j 个黑点

  转移的时候像树形背包合并

  写树形背包时要小心  不要把复杂度写假

  

  Code:

    

6.状压DP

枚举超集

枚举子集

 例题  HNOI  公交线路

  f[i][s]表示i的后 p 站停靠的状态是 s

  矩乘  把 f[i] 看做一个行向量  构造一个矩阵A  使得  f[i]*A = f[i+1]

  矩阵乘法满足结合律  可用矩阵快速幂   O(k3*log(n))             当 f[i]仅有f[i-1]转移过来  就可以构造一个矩阵来优化DP了

  外层状态矩乘优化掉

  内层预处理出有用状态  : 始终包含 k 个 1 的状态是有用的

7.概率期望

  加法原理

  乘法原理

  期望的线性性

  

  SHOI 2014  概率充电器

  因为一个节点带电:u 带电 或者 相邻的边带电  ,  "或者"  不好做,考虑u不带电,并且相邻边不带电  就很好做了

  设 f[u] 表示 u 的子树,u 不带电的概率

  没有考虑 father 的影响
  所以 dp 两遍   这时根节点的答案是正确的

  考虑子节点的答案可以由 father 节点转移过来

  以v作为根,把发father节点看做根(换根法) father的答案直接除掉当前子树的答案 , 子节点答案再乘上father节点答案

8. DP优化

决策单调性优化   (打表  /  yy)

  有决策单调性当且仅当满足四边形不等式

  维护每一段的左端点,右端点,决策点是什么   放到队列里面 按左端点排序

  加入一个 k,比较k和这一段的左端点,如果左端点都劣于k,则踢掉,不然在段里二分,找到最优位置,分成两段,前一段是之前的,后一段是新加入的决策点

  

  例题:  诗人小G

斜率优化

  例题: 玩具装箱 (决策单调性 / 斜率优化)    加强版 : k次方只能决策单调性

奇技淫巧

1. WQS二分

  如果答案关于某个变量 x 是凸函数  要求某个f(x) 但是不好求,但 max f(x)的值很好求   于是可以减掉一个函数, 使答案向要求的位置逼近

  凸函数减掉切线,切点处取最大值

  因为斜率单调  所以可以二分斜率

  例题 : CF739E

  n<=200

  f[i][a][b]表示抓了 i 个宝贝  用了 a 个宝贝  b 个超级球

  枚举怎么抓第 i 个容易转移

  n<=100000

  如果确定了 a   关于 b 是一个凸函数

  二分套二分

  O(nlog2n)

原文地址:https://www.cnblogs.com/tuchen/p/10145147.html

时间: 2024-11-04 17:08:28

12.19 省选预备班的相关文章

12.17 Nginx负载均衡;12.18 ssl原理;12.19 生产ssl密钥对;12.20 Nginx配置ssl

扩展: 针对请求的uri来代理 http://ask.apelearn.com/question/1049 根据访问的目录来区分后端web http://ask.apelearn.com/question/920 12.17 Nginx负载均衡 1. 安装dig命令: [[email protected] ~]# yum install -y bind-utils 2. 用dig获取qq.com的ip地址: [[email protected] ~]# dig qq.com 3. 创建ld.co

TCL 中upvar 用法 (摘自http://www.cnblogs.com/kane1990/archive/2011/12/19/2293981.html)

可以用 upvar 命令模拟传引用调用的行为,这对数组特别有用.如果a是一个数组,就不能像myproc $a这样把它传给过程myproc,因为并没有 对应整个数组的值:只有对应各个数组元素的值. 但是可以把数组名传给过程,myproc a,然后使用upvar命令在过程中访问数组的元素. 下面是在过程中使用upvar的简单示例,输出一个数组的内容: proc printArray {name} { upvar $name a foreach el [ lsort [ array names a]]

2017.12.19 2周2次课

2017.12.19二周第二次课 2.10 环境变量PATH echo用来输出PATH的值.PATH前面的$是变量的前缀符号 1.你的命令在上述几个目录里面,在输入命令时就不用输入绝对路径,直接使用.因为在输入命令时,系统会在上述的几个目录里去寻找这个命令.当然也可以输入绝对路径 Copy命令[ls]到目录tmp下,并改名[ls2],二者实现的功能一样 直接输入命令[ls2],确不行.因为命令[ls2]不在"/usr/local/sbin:/usr/local/bin:/usr/sbin:/us

12.19&amp;12.20 -基础命令练习二

12.19&12.20 基础命令练习二 第1章 Linux开机启动过程 linux启动过程 1.开启开关 2.bios开机自检 3.mbr引导 4.grub菜单 选择内核 5.加载内核 6.启动init进程  init进程是linux启动的时候运行的第一个进程 7.从/etc/inittab读取运行级别 8.根据/etc/rc.d/rc.sysinit 初始化系统 (设置主机名 ip地址) 9.根据运行级别启动对应的软件(开机自启动软件) 10.运行mingetty 显示登录界面 第2章 PAT

12.17 Nginx负载均衡;12.18 ssl原理;12.19 生产ssl密钥对;12.20 N

12.17 Nginx负载均衡:12.18 ssl原理:12.19 生产ssl密钥对:12.20 Nginx配置ssl 扩展: 针对请求的uri来代理 : http://ask.apelearn.com/question/1049 根据访问的目录来区分后端的web : http://ask.apelearn.com/question/920 nginx长连接 : http://www.apelearn.com/bbs/thread-6545-1-1.html nginx算法分析 : http:/

12.17Nginx负载均衡12.18ssl原理12.19生成ssl密钥对 20Nginx配置ssl

12.17Nginx负载均衡查看域名的IP,用dig命令首先安装 一下dig命令yum install -y bind-utils这时候就可以查看到qq.com的ipb 没有更改配置文件前只能访问默认页,更改配置文件之后,加载配置文件再访问curl x127.0.0.1:80 www.qq.com 就不一样了,进入主页了.只不过反馈回来的是网页的原码nginx不支持代理https,新版本 的也只支持http tcp12.18 ssl原理12.19 生成ssl密钥对需要安装 一个包,查看一个命令需

12.17 Nginx负载均衡 12.18 ssl原理 12.19 生成ssl密钥对 12.20 N

12.17 Nginx负载均衡 [[email protected] ~]# yum install -y bind-utils[[email protected] ~]# dig www.qq.comANSWER SECTION:www.qq.com. 73 IN A 59.37.96.63www.qq.com. 73 IN A 14.17.42.40www.qq.com. 73 IN A 14.17.32.211[[email protected] ~]# curl -x127.0.0.1:

【日记】12.19

12.19 DP P1091:找出最高的合唱队形. 思路:dp1[i]表示以i为最后一个人,1-i中的LIS,dp2[i]表示以i为第一个人,i-n中的LDS.dp1从前往后跑,dp2从后往前跑.注意一下,不是从前往后的LDS. #include<bits/stdc++.h> using namespace std; const int M=140; int a[M],n,ans[M]; struct LIS{ int dp[M],d[M]; void run(){ int len=0; fo

C++Primer 5th 练习 12.19

这阵子真是太忙了, 连续做了四个课设. 当然这并不能作为好久没写博客的借口, 没写博客的主要原因只有一个: 懒. 最近又开始回顾C++的语法与特性(据说C++就是一门需要反复回顾的语言),以及学习C++的编程规范. 敲了C++Primer 5th 上的一道典型的练习题,纪念一下这即将过去的2016. 题目描述: 定义你自己版本的 StrBlobPtr, 更新 StrBlob类, 加入恰当的 friend 声明及begin 和 end 成员. 这道题目主要是练习 智能指针 share_ptr 和