摘要:
为了凑出 1 - x 的所有硬币: 假设当前已经凑出了1 ~ m 的所有面值的硬币,那么为了凑出更大面值的硬币,应该如何选择呢? 有这些情况: <1> 选面值 t 属于 1~m 的硬币: 这当然可以,但是想一想,有没有更好的选择呢? 我们选择一个面值为 t 的硬币,那么,我们下一次能够凑出的面值为 阅读全文
摘要:
一维01背包只涉及重量、价值、容量三个变量间的限制关系。 多维01背包实际上思路和一维一样,只不过让重量这个变量多了一种(比如时间?成本?) 实际上解决的思路就是再加一重循环就行。 例题:https://www.luogu.com.cn/problem/P1855 代码: 1 #include <i 阅读全文
摘要:
题目链接 : https://www.luogu.com.cn/problem/P1006 想到了用四维数组来枚举的,但是不太明白如何判重。后来才明白,只需要令 x2 > x1 即可 先来分析状态转移方程 : dp[ x1 ][ y1 ][ x2 ][ y2 ] = max( max( dp[ x1 阅读全文
摘要:
第一次接触区间DP,真奇妙..... 1 #include <iostream> 2 #define Maxsize 202 3 #define INF 0x3fffffff 4 using namespace std; 5 int dp[Maxsize][Maxsize]; 6 int dp2[M 阅读全文
摘要:
https://vjudge.net/problem/UVA-1595 之前没做过这种题目,一时间没想出来如何下手。 想通之后,剩下的操作只剩下排序了。 对于任意n个散点,一旦给出,他们的对称轴实际上已经确定了,而且十分好求: 横对称轴 一定是 横坐标最大的X1和横坐标最小的 X2 的平均数,即 X 阅读全文
摘要:
思路: 先从树中任意选择一个顶点。由于树具有任意两个顶点连通的性质,利用DFS或BFS可求出与1距离最远的顶点的集合A,它们都是直径的顶点,但是此时直径长度没有确定、且无法保证求出了所有的直径顶点,需要再次搜索。从第一次搜索所得到的直径顶点中,任意取一个,再次DFS or BFS,得到新的顶点集合B 阅读全文
摘要:
今天刚刚学习堆和堆排,先手抄了一遍算法书,再自己实现一遍,作为巩固。 update : 早上起床把小根堆写了一遍 = 。 = 1 /* 小根堆 */ 2 #include <iostream> 3 #include <vector> 4 using namespace std; 5 void dow 阅读全文
摘要:
这个题自己没有做出来,看的luogu里面dalao们的题解,感触很深。实际上这个题,有贪心的思想,也有DP的思想。 当时看到这个题就想到了贪心,能闪烁就闪烁,但是没想明白在体力不够的时候该做什么。 看了题解之后,知道了如果遇见这种问题,可以同时开两个变量进行尝试,一个一直闪,没体力就恢复体力。另一个 阅读全文
摘要:
/* 在求最长回文子串时,如果暴力枚举左右端点,将得到指数级的复杂度。优化一点,使用二维数组来DP,可以将复杂度降到O(m*n)m,n为两条串的长度。本文采用Manacher算法,无论是时间还是空间上都优于二维DP。 */ 1 #include <iostream> 2 #include <stri 阅读全文