整齐打印问题

考虑在一个打印机上整齐地打印一段文章的问题。输入的正文是n个长度分别l[1], l[2], ..., l[n](以字符个数度量)的单词构成的序列。我们希望将这个段落在一些行上整齐地打印出来,每行至多M个字符。“整齐度”的标准如下。如果某一行包含从i到j的单词,i<j,且单词之间只留一个空,则在行末多余的空格字符个数为M-j+i-∑(k=i to j)l[k],它必须是非负值才能让该行容纳这些单词。我们希望所有行(除了最后一行)的行末多余空格字符个数的立方的总和最小。请给出一个动态规划算法,来在打印机上整齐地打印出一段有n个单词的文章。分析所给算法的执行时间和空间需求。
解答:我们用C[i]表示用单词1,..,i打印后每行空格数立方和的最小值,由题意知,当我们用第i个单词到第j个单词打印某一行时,其剩余空格的数目是R[i,j]=M-j+i-∑(k=i to j)l[k],那么我们用W[i,j]=R[i,j]^3表示其剩余空格的立方(注意如果,R[i,j]<0,那么W[i,j]=+无穷,表示这一行不能容纳单词i到j。)所以我们知道状态转换方程为:
C[i]=min{C[r]+R[r+1,i]| 1=<r<i},初始化为:
C[0]=0;C[1]=W[1,1]; 如果j=n,并且R[i,j]>0,那么W[i,j]=0,表示最后一行代价不算。最终就是要求c[n]的值。

转载于:https://www.cnblogs.com/kevinLee-xjtu/archive/2011/12/07/2299099.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值