UVA - 1375 The Best Name for Your Baby (有’环‘的动态规划)

问题

分析

参考:
https://blog.csdn.net/hyqsblog/article/details/46909863
https://github.com/aoapc-book/aoapc-bac2nd/blob/master/ch9/uva1375.cpp
https://blog.csdn.net/Fuxey/article/details/49279917
https://blog.csdn.net/u014258433/article/details/69070747

这道题感觉是这章到目前最抽象的一题,无论是思路还是解法都很难懂,我看了代码仓库中的代码,勉强看懂,但是下次估计还是做不出来,简单记载一下自己的理解

目标:求符合要求最小字典序的字符串

  1. 把上下文无关文法分解成基本的的结构A->BC这种形式,然后拆分后规则总数不超过maxn*(maxlen-1)个
  2. 定义状态d(i,L)是字符串i能够变成长度L的最小字典序字符串,i是字符串在字典中的序号
  3. 然后对于这些状态,将他们看作是一张图中的节点,状态之间的转移关系是由拆分后的规则决定的,这一步说起来简单,但是实际代码比较复杂
  4. 状态转移方程:分为两种转移方式,
    不同层之间的:L进行拆分, d p ( i , L ) = m i n ( d p ( j , p ) + d p ( k , L − p ) ) , 其 中 i − > j k , 0 < p < L dp(i,L)=min(dp(j,p)+dp(k,L-p)),其中i->jk,0<p<L dp(i,L)=min(dp(j,p)+dp(k,Lp)),i>jk0<p<L
    同层间的:L不变 d p ( i , L ) = m i n ( d p ( k , L ) ) , i − > j k 或 者 i − > k j , d p [ j ] [ 0 ] = = " " dp(i,L)=min(dp(k,L)), i->jk或者i->kj,dp[j][0]=="" dp(i,L)=min(dp(k,L)),i>
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值