摘要:
双端队列 双端队列是一种具有队列和栈性质的数据结构,它能在两端进行插入和删除,而且也只能在两端插入和删除。 STL 中的双端队列可以用 deque,它的用法如下: dq[i] 返回队列中下标为 i 的元素 dq.front() 返回队头 dq.back() 返回队尾 dq.pop_back() 删除 阅读全文
摘要:
堆是一种树形结构,树的根是堆顶,堆顶始终保持为所有元素的最优值。有大根堆和小根堆,大根堆的根节点是最大值,小根堆的根节点是最小值。堆一般用二叉树实现,称为二叉堆。 堆的存储方式 堆的操作 empty 返回堆是否为空 top 直接返回根节点的值,时间复杂度 \(O(1)\) push 将新元素添加在数 阅读全文
摘要:
最短路是图论中最经典的模型之一,在生活中也有很多应用。例如,城市之间有许多高速公路相连接,想从一个地方去另一个地方,有很多种路径,如何选择一条最短路的路径就是最基本的最短路问题。有时候问题会更加复杂,加上别的限制条件,例如某些城市拥有服务区,连续开车达到一定的时间就必须要进服务区休息,或者是某些路段 阅读全文
摘要:
进制 12 个物品被称为 1 打,12 打被称为 1 罗,12 罗被称为 1 格。请问: 15 个是几打几个? 6775 个是几格几罗几打? 2 打 3 个是多少个? 1 格 9 罗 8 打 10 个是多少个? 以上的“几”均是不小于 0 且小于 12 的整数 分析 根据 15÷12=1···3,1 阅读全文
摘要:
区间 DP 区间 DP 是可以由小区间的结果往两边扩展一位得到大区间的结果,或者由两个小区间的结果可以拼出大区间的结果的一类 DP 问题 往往设 \(dp[i][j]\) 表示处理完 \([i,j]\) 区间得到的答案,按长度从小到大转移 因此一般是先写一层循环从小到大枚举长度 \(len\),再写 阅读全文
摘要:
什么是贪心 在每次决策的时候都采取当前意义下的最优策略,一般贪心问题的难点在于最优策略的选择。 例题:有 \(n\) 项工作,每项工作从 \(s_i\) 时间开始,\(t_i\) 时间结束,对于每项工作你都可以选择是否要参加,若参加则必须全程参与。那么在不能同时参与多个工作的情况下,最多可以参加几个 阅读全文
摘要:
动态规划 方案数问题 例题:P1002 [NOIP2002 普及组] 过河卒 参考代码 #include <cstdio> typedef long long LL; const int N = 25; int dx[8] = {-2, -2, -1, -1, 1, 1, 2, 2}; int dy 阅读全文
摘要:
#include <cstdio> #include <algorithm> using namespace std; const int N = 10005; const int M = 1005; const int INF = 1e9; int up[N], down[N], low[N], 阅读全文
摘要:
#include <cstdio> #include <algorithm> using namespace std; const int N = 105; const int A = 25005; int a[N]; bool dp[A]; int main() { int t; scanf("% 阅读全文
摘要:
暴力枚举 枚举国内和国外的廊桥数量配额,再模拟航班停机过程 #include <cstdio> #include <algorithm> using namespace std; const int N = 100005; struct Flight { int l, r; // l 抵达时刻,r 阅读全文