我才不是萝莉控呢

本文探讨了哈夫曼树在解决动态规划问题中的应用,通过分析dp[i][j]的递推公式,将其与哈夫曼树的权值最小特性相结合。博客指出,构建最小权值的完全二叉树可以帮助找到dp问题的最优解。同时,作者提醒读者注意知识点的复习,以避免在解决问题时被卡住。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我才不是萝莉控呢


题意

&@……#(!@ 然后变成了一个 d p dp dp,有:
d p [ i ] [ j ] = m i n ( d p [ i + 1 ] [ j − 1 ] , d p [ i ] [ j ∗ 2 ] + Σ k = i + 1 n a [ k ] ) dp[i][j]=min(dp[i+1][j-1],dp[i][j*2]+\Sigma^n_{k=i+1}a[k]) dp[i][j]=min(dp[i+1][j1],dp[i][j2]+Σk=i+1na[k])
(对应原题从终点走到起点)


我们很容易回忆起曾经学过的哈夫曼树算法:

  1. 一棵树的权定义为 Σ \Sigma Σ(叶子节点的权值) × \times ×(该叶子节点的深度).
  2. 哈夫曼树是一棵[在叶子节点大小恒定的情况下],权最小的完全二叉树.

其构建和计算权方式为:

参考1参考2(和 Σ k = i + 1 n a [ k ] \Sigma^n_{k=i+1}a[k] Σk=i+1na[k]看起来有点联系)

由于哈夫曼树的主要特点在于权最小,那么很容易联想到 d p dp dp中不够优的就是权不是最小的那些完全二叉树.


观察 d p dp dp的递推公式发现:

  1. d p [ i ] [ j ] dp[i][j] dp[i][j]可以等效为 [以 a [ i ] a[i] a[i]为叶子节点] [前 i i i个叶子被放入树中] [有 j j j个空位] 的树权.

在这里插入图片描述

  1. d p [ i ] [ j ] = d p [ i + 1 ] [ j − 1 ] dp[i][j]=dp[i+1][j-1] dp[i][j]=dp[i+1][j1]相当于将 a [ i ] a[i] a[i]放入树中.

    在这里插入图片描述

  2. d p [ i ] [ j ] = d p [ i ] [ j ∗ 2 ] dp[i][j]=dp[i][j*2] dp[i][j]=dp[i][j2]相当于将已有的空白叶子节点翻倍.

在这里插入图片描述

(如图, 6 6 6左边的作废,变成加了两个新的)

想要 d p dp dp值最小,只需要将 a [ i ] a[i] a[i]合并果子,求出哈夫曼树权即可.

一些总结

不要被卡知识点要及时复习!

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值