清北学堂清华大学钟皓曦神仙讲课day3摘要
---恢复内容开始---
今天全是DP
awsl,真的好难
先从斐波那契开始:
dp:满足有一个状态边界条件(f[0]=0,f[1]=1)
边界条件:不需要计算其他状态的值而可以直接得出的状态或者最底层状态(不能由其他状态推出来)
然后是状态转移方程:f[n]=f[n-1]+f[n-2](然后是矩阵加速或者递推。。)
总之:边界条件,状态,转移方程为三大核心(其他都是一些题目变量。)
据说动态规划和dag(大哥)是等价的,但是图论后几天再讲。。QWQ
DP有这几种:(zhx大佬的神仙字体)

这是斐波那契数列顺推:
用别人更新自己。
逆推:
用自己更新别人。
记忆化搜索:

复杂度O(f[n])f[n]为第n项的值
其实他有通项公式的:

也就是说,复杂度为指数级别,因为右边那一项小于1,他的n次方也小于一
为何如此之慢?
因为他有重复调用(f[n]=f[n-1]+f[n-2],f[n-1]=f[n-2]+f[n-3])f[n-2]被调用两次
那么我们再开一个数组,用来判断f[n]是否被算过(suan_le_mei数组)
算过就是1,否则为0(bool)

也就是判断是否被算过(f[n]已经有值了),算过就直接返回,没算过就1.算2.赋值bool3.赋值f[n]
没错就是这样QWQ(%zhx大佬竟然把蒟蒻讲明白了)
在安利一下本人写的斐波那契矩阵加速:https://www.cnblogs.com/lbssxz/p/10679655.html
例题完结
常见dp种类:
其他dp好可怕(最可怕的是未知)

还有两种NOIP涉及概率比较小的:

但是其他4种dp套路要背熟。
1,数位dp:
给定两个正整数l,r,求l到r有多少个数?
(wtf这个题不是r-l+1吗)
但是,zhx让你用数位dp做。
首先将题目转化一下(减去l)得0到x有多少个数这个问题
那么设0<=v<=x,将v按十进制位数分解,得每一位vn,vn-1,vn-2....v1,我们从高位开始填v的位数,要分两种情况:
1,当前面已经填好的位数和x对应位数相同时,现在填的位数必须小于等于x对应位数才满足v<=x
2,当前面有至少一位和x对应位数不相同时,这意味着当前一位不管填多少,都满足v<x,那么,0到9随便填就行,
状态:设数组f[i][j],代表当前填到了第i位,j的值为(0:当前面几位有至少一位不和x对应位相等时,随便填 1:当前面几位都相同时只能填vi<=x[i])
状态转移:从第一位开始,if分两种情况递归
代码:先存x的位数:

其中z为存x位数的数组(下标从0开始)
然后是dp主体部分:
首先必须清空memset()%
初始化:
why?因为他们在n+1位的值都为0,所以相等的情况只有一种
然后用一个for循环,枚举从第n位到第0位,然后分情况转移就ok了。QWQ
改一下问题:求l,r区间内有多少个相邻数位只差大于2的数?
状态为了包含所有条件,发生了变化
其他改改就行。
2.树形dp
给你一个有n个结点的树,求它有几个点(没错答案就是n你没看错)
老师竟然把这么简单的题让我们用树形dp做
又变难了
#include<iostream> using namespace std; int f[]; void dfs(int p)
{
for (x is p's son)
{
dfs(x);
f[p] += f[x];
}
f[p] ++;
} int main()
{
cin >> n;
read_tree(); dfs();
cout << f[] << endl; return ;
}
状态dp
状压复杂度为
而n<=20时为状压的数据范围,考虑使用状压
清北学堂清华大学钟皓曦神仙讲课day3摘要的更多相关文章
- 清北学堂北京大学吴耀轩神仙讲课day5摘要
今天讲图论 图是啥?(白纸上的符号?) 对于一个拥有n个顶点的无向连通图,它的边数一定多于n-1条.若从中选择n-1条边,使得无向图仍然连通,则由n个顶点及这 n-1条边(弧)组成的图被称为原无向图的 ...
- 清北学堂 2020 国庆J2考前综合强化 Day3
目录 1. 题目 T1 石头剪刀布 题目描述 Sol T2 铺地毯 题目描述 Sol T3 数列游戏 题目描述 Sol T4 数星星 题目描述 Sol 2. 算法 -- 动态规划 1. 概述 2. 线 ...
- 清北学堂学习总结day2
今天是钟皓曦大佬讲课,先来膜一波 %%%%% •数论 数论是这次培训的一个重点,那么什么是数论呢? 数论是研究整数性质的东西,所以理论上day2不会涉及小数QwQ (切入正题) •整除性: 设a, ...
- 清北学堂2017NOIP冬令营入学测试P4745 B’s problem(b)
清北学堂2017NOIP冬令营入学测试 P4745 B's problem(b) 时间: 1000ms / 空间: 655360KiB / Java类名: Main 背景 冬令营入学测试 描述 题目描 ...
- 清北学堂2017NOIP冬令营入学测试 P4744 A’s problem(a)
清北学堂2017NOIP冬令营入学测试 P4744 A's problem(a) 时间: 1000ms / 空间: 655360KiB / Java类名: Main 背景 冬令营入学测试题,每三天结算 ...
- 济南清北学堂游记 Day 1.
快住手!这根本不是暴力! 刷了一整天的题就是了..上午三道题的画风还算挺正常,估计是第一天,给点水题做做算了.. rqy大佬AK了上午的比赛! 当时我t2暴力写挂,还以为需要用啥奇怪的算法,后来发现, ...
- 清明培训 清北学堂 DAY2
今天是钟皓曦老师的讲授~~ 总结了一下今天的内容: 数论!!! 1.整除性 2.质数 定义: 性质: 3.整数分解定理——算数基本定理 证明: 存在性: 设N是最小不满足唯一分解定理的整数 (1) ...
- 清明培训 清北学堂 DAY1
今天是李昊老师的讲授~~ 总结了一下今天的内容: 1.高精度算法 (1) 高精度加法 思路:模拟竖式运算 注意:进位 优化:压位 程序代码: #include<iostream>#in ...
- 五一培训 清北学堂 DAY3
今天是钟皓曦老师的讲授~ 今天的内容:动态规划 1.动态规划 动态规划很难总结出一套规律 例子:斐波那契数列 0,1,1,2,3,5,8,…… F[0]=0 F[1]=1 F[[n]=f[n-1]+ ...
随机推荐
- DFA算法以及ios中OC实现DFA
DFA不同于苹果手机的idfa DFA全称为:Deterministic Finite Automaton,即确定有穷自动机.其特征为:有一个有限状态集合和一些从一个状态通向另一个状态的边,每条边上标 ...
- 如何解决错误【selenium.common.exceptions.SessionNotCreatedException】
如何解决错误[selenium.common.exceptions.SessionNotCreatedException] [问题起因] 2018年12月26日晚,启动我的pycharm准备学习s ...
- 无法在WEB服务器上启动调试,Web 服务器配置不正确
访问IIS元数据库失败 思考可能是次序出了问题,解决 1.打开CMD,进入 C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727 2.输入 aspnet_regi ...
- 关于 if __name__ == '__main__':的使用
当是用 if __name__ == '__main__': 时,下面调用函数只是在当前脚本调试, 而我们需要在别处导入这个脚本中的类或者函数时,这个if __name__ == '__main__ ...
- python学习之内存驻留机制简述
第四章 4.1 小数据池 4.1.1 代码块 一个模块,一个函数,一个类,甚至一个command命名都可以称之为一个代码块. 官方解释: A Python program is constructed ...
- 逻辑回归2-scikit-learn参数介绍
1.1 scikit-learn参数介绍 1.1.1 导入 from sklearn.linear_model import LogisticRegression 1.1.2 版本 sci ...
- 应用安全 - 中间件 - Tomcat - 漏洞 - 汇总
管理后台弱口令 CVE-2019-0232 Date 类型 任意代码执行 影响版本 Apache Tomcat .M1 to Apache Tomcat to Apache Tomcat to 前置条 ...
- AGC035 B - Even Degrees【思维·树形结构的妙用】
题目传送门 一句话题意: 首先,每一条边会产生1个入度,1个出度,因此,如果边的数量是奇数的话,图的所有节点的总出度就是奇数,不可能每个节点的出度都是偶数,因此无解. 有解时,我们先找出原图中的一棵生 ...
- 暴力破解-H3C路由器-MSR900
作者:zptxwd@gmail.com 最后修改日期2017年5月10日 转载请保留出处 声明,本文仅用于技术交流和学习,不得用于任何商业用途及违法行为. 所暴力破解的设备信息 华三路由器 ...
- [Python3] 025 包
目录 1. 模块 1.1 模块是什么? 1.2 为什么用模块? 1.3 如何定义模块? 1.4 如何使用模块? 1.4.1 例子1 1.4.2 例子2 1.4.3 例子3 1.4.4 例子4 1.4. ...