随笔分类 - 动态规划
摘要:#题目详见洛谷 ##解析 设dp[i][j]表示 a[i] b[j] 的最长子序列长度,那么有三种情况: 一,a[i]不在子序列中,此时dp[i][j] = dp[i - 1][j]; 二,b[i]不在子序列中,此时dp[i][j] = dp[i][j - 1]; 三,都在,此时dp[i][j] =
阅读全文
摘要:#解析: 这道最短路径的问题,我们还是采用拓扑的思路,反着存图,往回加,走最短的,如果从边上绕路比直接过去省距离,那么就从边上绕路。 还有值得一提的是链式前向星的记录路径: if(e[i].w + dp[now] < dp[u]){ dp[u] = e[i].w + dp[now]; path[u]
阅读全文
摘要:#描述 五一到了,PKU-ACM队组织大家去登山观光,队员们发现山上一个有N个景点,并且决定按照顺序来浏览这些景点,即每次所浏览景点的编号都要大于前一个浏览景点的编号。同时队员们还有另一个登山习惯,就是不连续浏览海拔相同的两个景点,并且一旦开始下山,就 不再向上走了。队员们希望在满足上面条件的同时,
阅读全文
摘要:、 这道题可以看成是一个最长路,用拓扑+dp来解决。 如果从边上绕一个点到达目的地能挖到的地雷比直接过去挖到的地雷多,就选择从边上绕 ####代码: #include <bits/stdc++.h> using namespace std; int head[1000001]; int a[1000
阅读全文
摘要:#解析 通过画图分析不难得到:首先我们对其中一个河岸从小到大排序,然后在另一个河岸中求出最长上升自序列即可。为什么这么写呢?因为爱情 因为所有合法的答案都是一个单调上升队列。 #代码: #include #include using namespace std; struct river { int
阅读全文
摘要:##T1最长不下降子序列 样例: in :13 7 9 16 38 24 37 18 44 19 21 22 63 15 out: 8 (还有需要输出的子序列) ####局部解析 找子序列的方法,这个理论上来说是可以用队列的方法的,但是由于需要输出最后的序列,队列的方法没法用,所以用n2的方法。 f
阅读全文