随笔分类 -  动态规划dp

摘要:题链 树形dp 令f[u]表示以u为根的子树需要的最小点数; 令g[u]表示以u为根的子树未被截断的点数; 对于一个点u,其孩子节点v; f[u] = $\sum_$f[v]; g[u] = $\sum_$g[v]; 若u是关键点: 则需要截断子树中未被截断的点: f[u] += g[u]; g[u 阅读全文
posted @ 2021-07-07 10:11 棉被sunlie 阅读(50) 评论(0) 推荐(0)
摘要:题链 做法1 写T了; 这是做法2; #include <bits/stdc++.h> using namespace std; #define ls rt<<1 #define rs rt<<1|1 #define LL long long #define PI acos(-1.0) #defin 阅读全文
posted @ 2021-05-27 11:32 棉被sunlie 阅读(181) 评论(0) 推荐(0)
摘要:# 题意 题链 题意:定义一个数字 num 在一个数组中的贡献为 最后一次出现的下标 减去 第一次出现的下标; 定义一个数组的价值 cost 为该数组中出现过的数字 num 的价值总和; 如数组 [2,2,3,2,3],cost = (4-1)+(5-3) = 5; 给定 n ,m,以及长度为 n 阅读全文
posted @ 2021-05-24 20:28 棉被sunlie 阅读(72) 评论(0) 推荐(1)
摘要:题链 dp[u][j]表示 包含u这个节点 不包含u节点父亲 大小为j的连通块方案数; 设v是u的一个子节点,并且递归求解出dp[v][j],递归终点就是dp[v][1] = 1,然后类似背包方法合并dp[u][],dp[v][]; 记cnt[i]表示大小为i的连通块数量; cnt[i]就是dp[ 阅读全文
posted @ 2021-05-11 15:00 棉被sunlie 阅读(100) 评论(0) 推荐(1)
摘要:题链 dp[u][j]表示u这个节点取j个物品的最大值(包含u点); 设v是u的一个子节点,并且递归求解出dp[v][j],递归终点就是dp[v][1] = val[v](val[v] 表示点v的权值),然后合并u,v; 答案就是dp[0][m+1],从0号点选取m+1个物品的最大值(0号物品val 阅读全文
posted @ 2021-05-11 14:41 棉被sunlie 阅读(59) 评论(0) 推荐(0)