【做练习】最佳加法表达式 (动态规划、长整数加法)

一点题外话

这是我首个blog。大三下学期了要推免,需要上机做题。虽然听学长说上机的题目傻子都能过,但还是要刷刷才安心。所以定期上 openjudge 白练做一两个题(搞了一两年机器学习结果这些大一学的算法都快搞忘了)

等半年后保完研了,我可能会写一些和DL、CV相关的博客。

题目

这次的题目是百练上的4152题,链接 http://bailian.openjudge.cn/practice/4152。

大致的意思是:给你若干组数据,每组数据包含一个数字m、一串由1-9组成的数字。你要做的事情是,在这个数字串中插入 m 个加号,使得得到的加法表达式具有最小值。要求每个加号都是左右有数字的,也就是说加号不能当作“正号”来用。

比如:给你输入的数字是1,数字串是"1234",那么就在 “1234” 中插入一个 ‘+’ ,最小的表达式为"12+34",输出46。

分析

如果设原数字串记为 a [ 0.. n ) a[0..n) a[0..n),长度为 n n n,令 S ( i , j ) S(i,j) S(i,j) 表示:索引为 i 的数字开始的后缀串中,插入 j 个加号的最小表达式的和。通过枚举下一个加号的可能位置,不难推出:
S ( i , j ) = m i n { a [ i . . . i + k ) + S ( i + k , j − 1 ) ∣ n − i + k > j − 1 } , w h e n   j > 0 S(i,j) = min \{a[i...i+k)+S(i+k, j-1)|n-i+k>j-1\}, when\ j>0 S(i,j)=min{ a[i...i+k)+S(i+k,j1)ni+k>j

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值