算法
文章平均质量分 91
yalipf
这个作者很懒,什么都没留下…
展开
-
区间dp--石子合并
合并的过程只能每次将相邻的两堆石子堆成一堆,每次合并花费的代价为这两堆石子的和,经过N-1次合并后成为一堆。我们从长度为2的区间开始考虑合并。整个算法使用动态规划求解问题,它将问题分解为较小的子问题,并使用子问题的解来构建当前问题的解。这个代码首先计算前缀和数组,然后使用三重循环计算所有可能的合并方案,并找出最小的合并代价。为了找到子区间[i, j]的最小合并代价,我们先初始化为一个极大值。注意,这里是从1开始的,这可能是因为数组的索引是从1开始的。所以,选择2的步骤c是最优的,确实,最小合并代价为18。原创 2023-10-04 00:45:01 · 166 阅读 · 0 评论 -
Anniversary party(树形dp 基础题)
MAXN是一个常量,表示最大员工数,稍微大于6000以预留一点余地。ratings数组存储每位员工的欢乐值。tree是一个数组,每个元素都是一个 vector,表示该员工的直接下属。dp是我们的动态规划数组,dp[i][0]表示第i位员工不参加聚会的最大欢乐值,而dp[i][1]表示他参加聚会的最大欢乐值。好的,让我们逐步解析这行代码。和dp是一个二维数组,用于存储动态规划的中间和最终结果。dp[i][0]存储的是,如果第i号员工不参加聚会,那么以i号员工为根的子树能够达到的最大欢乐值。原创 2023-10-03 13:40:29 · 140 阅读 · 0 评论