摘要: 简单来说就是背包问题与树形 DP 的结合 让我们来看个例题 https://www.luogu.com.cn/problem/P2014 这道题的思路如图: ac代码如下: #define NMAX 303 int dp[NMAX][NMAX];//1维->节点编号 2维选了多少门课 //dp[u] 阅读全文
posted @ 2022-07-25 19:22 传说中的水牛 阅读(21) 评论(0) 推荐(0) 编辑
摘要: 最小生成树的 Kruskal 算法,非常简单易懂 先按照边权从小到大排序。 依次将边的两个点加入到树中,加入前判断一下,这两个点是否已存在于树中(使用并查集 https://www.cnblogs.com/kingbuffalo/p/15380294.html) 并查集需要记录每个森林中有几个节点时 阅读全文
posted @ 2022-06-13 16:07 传说中的水牛 阅读(17) 评论(0) 推荐(0) 编辑
摘要: 混合背包就是指,既有01背包,完全背包,多重背包。 解法很简单,就是对第二层for循环分情况讨论。 直接来题吧 此处多重背包使用二进制优化算法,当然也可以使用单调队列进行优化 详见 https://www.cnblogs.com/kingbuffalo/p/16285929.html 题:https 阅读全文
posted @ 2022-06-09 15:30 传说中的水牛 阅读(128) 评论(0) 推荐(0) 编辑
摘要: 区间dp一般是 形如 dp[i][j] = oper(dp[i][k],dp[k+1][j] ) + cost[i..j]; 其中 oper可能是 求最大最小值,或乘法或加法,等等。 的dp 有一个比较简单题,可以对区间dp有个基本的了解https://www.acwing.com/problem/ 阅读全文
posted @ 2022-06-01 22:48 传说中的水牛 阅读(18) 评论(0) 推荐(0) 编辑
摘要: 单源最短路径算法,其实就是进行松驰的算法。 有Dijkstra/Bellman ford/SPFA 这三种算法 如图所示: 算法模板: 共用代码 #define NMAX 105 #define EMAX 10005 int head[NMAX]; int dist[NMAX]; int ver[E 阅读全文
posted @ 2022-05-30 10:47 传说中的水牛 阅读(45) 评论(0) 推荐(0) 编辑
摘要: 要求: 看此文需要如下要求。 1,熟悉01背包及完全背包,对01背包/完全背包中的逆序和顺序选择的原因要了解。https://www.cnblogs.com/kingbuffalo/p/16241927.html 2,熟练使用单调队列求滑动窗口中的最大值 https://www.cnblogs.co 阅读全文
posted @ 2022-05-19 18:52 传说中的水牛 阅读(44) 评论(0) 推荐(0) 编辑
摘要: 问题 完全背包 有n个物品 已经第i个物品重量wi 价值vi 无数个 总背包容量 W 01背包 有n个物品 已经第i个物品重量wi 价值vi 只有1个 总背包容量 W 思路: 设dp[i][j] i为考虑前i个物品时 j为背包总量。 则有 无后效性:i为前i个物品考虑, j为总量,两者均从小到大增加 阅读全文
posted @ 2022-05-11 15:51 传说中的水牛 阅读(32) 评论(0) 推荐(0) 编辑
摘要: 也是非常经典的一道题 比较简单的做法是: 设dp[i] i: 以nums[i]作为一个子数组的,最长的上升子序列 则有 无后效性:i肯定不会影响i之前的。 子问题重叠:算i+1,i+2 .. n 时,都需要dp[i] 最优子结构:for( int j=0;j<i;++j ) if ( nums[j] 阅读全文
posted @ 2022-05-06 19:57 传说中的水牛 阅读(24) 评论(0) 推荐(0) 编辑
摘要: 非常经典的一道题 设dp[i][j]为最长公共子序列 i:s1以i为结尾的字符串 j:s2以i为结尾的字符串 则有 无后效性:i+1与j+1 不会影响之前的 子问题重叠:使用i-1, j-1 来代表已经对的结果 最优子结构:dp[i][j] = s[i-1] == s[j-1] ? dp[i-1][ 阅读全文
posted @ 2022-05-06 13:26 传说中的水牛 阅读(19) 评论(0) 推荐(0) 编辑
摘要: 题 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5 问:最大和是多少。 思路图解 设dp[i][j] i 为第i 行,j 为 第i行的第j个数字时。 则有 无后效性:向下选择的时候不会影响之前的选择 子问题重叠:使用dp[i-1] 来代表上一行已经选好的结果 最优子结构:dp[i][j] 阅读全文
posted @ 2022-05-06 12:31 传说中的水牛 阅读(11) 评论(0) 推荐(0) 编辑