动态规划之整齐打印

博客介绍了如何使用动态规划解决整齐打印的问题,通过调整单词的排列方式,使得行尾空格的立方和最小,从而达到整齐的效果。文章中提到,贪心算法可以得到最优解,并给出了动态规划的递推公式。

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

算法描述部分转自:点击打开链接

''' 乍一看以为是空格个数和,如此可以使用“贪心算法”求解,即从第一行开始尽可能多的放置单词,可以证明这个“贪心解”也是最优的,假设有一个最优解从某行开始和“贪心解”不相同,我们可以从这行开始进行构造证明,将下一行的某些单词拿到行尾来使得当前行为“贪心解”,如此“贪心解”的行数必定不大于“最优解”,如此命题得证。

此处的空格立方和,有点类似数学期望的方差,指的是希望所有行的末尾空格看起来尽可能的整齐,即排版感觉上最整齐。举例来说,如果两行的行尾空格总数为5,则空格以2、3(35)分布时立方和最小,1、4分布时立方和(129)相当大。为简单起见,可以对每个单词的长度加1,行的长度也加1,于是就不用考虑单词之间的空格了。

此题的动态规划非常直接,可惜个人刚开始不敢想啊(非常感谢网络友人的无私奉献)!设M(i)为第1个单词到第i个单词的最优排版方案,考虑此方案的最后一行,有以下的递推公式:

M(i) = MIN(M(k)+ left_sp

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值