不定期更新蓝桥杯省赛赛题题解
一些关于数据范围的小Tips
有时候我们可以根据数据范围来确定算法
时间复杂度 | 常用算法 |
---|---|
N<=30 =>指数级 | dfs+剪枝 状态压缩dp |
N<=100 => O(N3 ) | floyd dp 高斯消元 |
N<=1000 => O(N2 ) O(N2logN ) | dp 二分 朴素dijkstra 朴素Prim Bellman-Ford |
N<=10000 => O(N * sqrt(N) ) | 块状链表 分块 莫队 |
N<=100000 => O(N * logN) | 各种sort 线段树 树状数组 set/map heap 拓扑排序 堆优化dijkstra 堆优化Prim spfa 求凸包 半平面交 二分 CDQ分治 整体二分 |
N<=1000000 => O(N)或者常数较小的O(N * logN) | O(N): 单调队列 hash 双指针扫描 并查集 kmp AC自动机 小常数NlogN: sort 树状数组 heap dijkstra spfa |
N<=1e8 => O(N) | 双指针扫描 kmp AC自动机 线性筛素数 |
N<=1e9 => O(sqrt(N) ) | 判断素数 |
N<=1e18 => O(logN) | 最大公约数 快速幂 二分 |
N<=1e1000 => O(k) | 高精度加减乘除 |
2021C++A组
T8 左孩子右兄弟
树形 dp + dfs 太经典了!
基本思路就是递归找每个子节点的dp值
dp值为当前节点的兄弟数+子树的树高 维护最大值
1 | // http://lx.lanqiao.cn/problem.page?gpid=T2898 |
2020C++A组
T9 糖果
状压dp裸题
1 |
|