PKU ACM/ICPC暑假训练班总结
2016-07-21 22:48
204 查看
1 Day:动态规划
动态规划考虑三点:状态定义,如何决策,边界条件
该状态选取是否可行:是否是最优子结构,是否有“无后效性” (此状态后的状态递推与如何达成此状态无关)
如该状态无法递推或有漏解:加一维状态细化问题分类,即使状态更复杂
遇到空间时间不足:滚动数组,状态空间压缩(集合表示等)
两种实现方式:递归(+记忆化) ,递推
两种思想方式:人人为我型(即由已知推未知) ,我为人人型(即由已知更新未知)
递推顺序:根据决策顺序判断
状态定义常见例子:前i个,i~j个,0-1问题
2 Day:搜索
DFS:
剪枝最重要!!
剪枝包括:可行性剪枝,最优性剪枝,
常见可行性剪枝:在该点处已经不可以继续走到终点
常见最优性剪枝:该点处结果已经超过最优解,从该点处即使走最优解法已经超过最优解,在该点处已经超过之前走到该点的最优解
可能结合状态压缩(集合表示)方法
BFS:
判重最重要!!
常见判重方法:STL中set,Hash表,利用排序序号来编码解码,数组vis[][]
A*:
估价最重要!!
估价函数:f(n)=g(n) + h(n) 其中h(n)要相容
POJ例题:1376,1324,1084,2449,1475
迭代加深搜索:
即加上限度的DFS,因为可能问题状态数太多
POJ例题:2286
极大极小搜索法:
运用于博弈搜索中,比如:围棋,五子棋,象棋等, 结果有三种可能:胜利、失败和平局。
其中运用Alpha–beta剪枝
3 Day:线段树&树状数组
线段树:每个节点都是一个区间,树适用于和区间统计有关的问题
若区间的端点不是整数,或者区间太大导致建树内存开销过大而MLE ,那么就需要进行“离散化”后再建树。
树状数组:适合单个元素经常修改而且还反复要求部分的区间的和的情况。
树状数组∈线段树
关键:想清楚每个节点要存哪些信息,以及这些信息如何高效更新,维护,查询。不要一更新就更新到叶子节点,那样更新效率最坏就可能变成O(n)的了。
4 Day:并查集&DFA
并查集:集合问题
除了parent[]数组,一般都额外定义一个数组relation[]表示结点与父节点的关系
关键是getParent()函数中找根结点时同时更新relation[]中与根结点关系
和merge()函数中合并两个集合时relation[]中的变化
动态规划考虑三点:状态定义,如何决策,边界条件
该状态选取是否可行:是否是最优子结构,是否有“无后效性” (此状态后的状态递推与如何达成此状态无关)
如该状态无法递推或有漏解:加一维状态细化问题分类,即使状态更复杂
遇到空间时间不足:滚动数组,状态空间压缩(集合表示等)
两种实现方式:递归(+记忆化) ,递推
两种思想方式:人人为我型(即由已知推未知) ,我为人人型(即由已知更新未知)
递推顺序:根据决策顺序判断
状态定义常见例子:前i个,i~j个,0-1问题
2 Day:搜索
DFS:
剪枝最重要!!
剪枝包括:可行性剪枝,最优性剪枝,
常见可行性剪枝:在该点处已经不可以继续走到终点
常见最优性剪枝:该点处结果已经超过最优解,从该点处即使走最优解法已经超过最优解,在该点处已经超过之前走到该点的最优解
可能结合状态压缩(集合表示)方法
BFS:
判重最重要!!
常见判重方法:STL中set,Hash表,利用排序序号来编码解码,数组vis[][]
A*:
估价最重要!!
估价函数:f(n)=g(n) + h(n) 其中h(n)要相容
POJ例题:1376,1324,1084,2449,1475
迭代加深搜索:
即加上限度的DFS,因为可能问题状态数太多
POJ例题:2286
极大极小搜索法:
运用于博弈搜索中,比如:围棋,五子棋,象棋等, 结果有三种可能:胜利、失败和平局。
其中运用Alpha–beta剪枝
3 Day:线段树&树状数组
线段树:每个节点都是一个区间,树适用于和区间统计有关的问题
若区间的端点不是整数,或者区间太大导致建树内存开销过大而MLE ,那么就需要进行“离散化”后再建树。
树状数组:适合单个元素经常修改而且还反复要求部分的区间的和的情况。
树状数组∈线段树
关键:想清楚每个节点要存哪些信息,以及这些信息如何高效更新,维护,查询。不要一更新就更新到叶子节点,那样更新效率最坏就可能变成O(n)的了。
4 Day:并查集&DFA
并查集:集合问题
除了parent[]数组,一般都额外定义一个数组relation[]表示结点与父节点的关系
关键是getParent()函数中找根结点时同时更新relation[]中与根结点关系
和merge()函数中合并两个集合时relation[]中的变化
相关文章推荐
- apk文件的重新签名
- apk文件的重新签名
- C语言合法标识符 hd 2024
- 转载——小甲鱼PE详解之IMAGE_NT_HEADERS结构定义即各个属性的作用(PE详解02)
- [DB2]事务和锁
- java中创建对象的方法
- RxJava学习小结之入门篇(一)
- 国外程序员推荐:每个程序员都应读的书
- PHP基础练习。。。
- 142. Linked List Cycle II
- neural-networks-and-deep-learning weight_initialization.py
- VS2013 配置pthread
- jquery序列化表单
- 伟景行 citymaker 从入门到精通系列
- HDU 4268 multiset
- 10个调试技巧
- [转载]---小甲鱼PE详解之IMAGE_DOS_HEADER结构定义即各个属性的作用(PE详解01)
- CCNA系列十之PPP协议
- 配置文件:elasticsearch.yml说明及启动权限
- javascript简单的轮播图