摘要:题解:定义状态dp[i][0/1],dp[i][0]表示选择节点i,dp[i][1]表示不选节点i。 通过树的后序遍历从根往上走, 状态转移方程 dp[i][0]=i->val+dp[i->left][1]+dp[i->right][1]; dp[i][1]=max(dp[i->left][0],d
阅读全文
08 2020 档案
摘要:题解:定义状态dp[i][0/1],dp[i][0]表示选择节点i,dp[i][1]表示不选节点i。 通过树的后序遍历从根往上走, 状态转移方程 dp[i][0]=i->val+dp[i->left][1]+dp[i->right][1]; dp[i][1]=max(dp[i->left][0],d
阅读全文
摘要:这是一个很有意思的题目,题目大意比较简单,当给出的n个数两两互质时,输出“pairwise coprime”,否则至少存在两个数不互质并且所有数的GCD=1,那么输出”setwise coprime“,如果说这俩条件都不满足的话,那就输出“not coprime”。 题解:这个问题可以转化为如何判断
阅读全文
摘要:关于Macacher算法,以前只知道一个模板,现在在理解的基础上记录一下它的思路 对于求字符串的回文子串的常见方法有: 1 暴力求解,即枚举中点,然后向左右扩散。 2 可以将字符串反转,然后通过dp求两个字符串的最长公共子序列。 这两种方法的时间复杂度都是O(n^2)。 Manacher算法充分用到
阅读全文
摘要:《背包九讲》 前言: 背包问题:有n件物品,每件物品有一定的价值,获取每件物品都需要一定的代价,背包问题就是在遵守一定的规则的情况下,获取最高的价值。 1,01背包 最基本的背包问题,其规则为每件物品要么选,要么不选。 定义状状态数组dp[i][j]表示前i个物品,当背包的容量为j时,背包可以容纳的
阅读全文
摘要:定义状态数组dp[i]表示以i为根节点,可以走的最远距离,也可以理解为以i为根节点树的高度。 我们考虑树的直径, 假设y是直径上的一个端点,X1和x2均为y的儿子节点,我们通过回溯的思想最先求出的应该是dp[x1],此时的dp[y]=0,然后下一步更新直径的长度,maxlen=max(maxlen,
阅读全文
摘要:题目链接:https://leetcode-cn.com/problems/longest-increasing-path-in-a-matrix/ 题解: 一开始想的是枚举起点然后跑BFS,这样时间复杂度为o(n^2m^2),不太好。感觉官方题解的方法很秒,记忆化搜索,时间复杂度为O(nm),简单
阅读全文
|