模4 最优路径问题


网址:http://www.bubuko.com/infodetail-7972.html

如下图:

  bubuko.com,布布扣


从1到4找出一条路径,要求路径的总长度mod4的余数最小。


分析:一条从1到4的最优路径,在它走到2或3时mod4的余数不一定最小。也就是说,最优策略的子策略不一定最优,所以本问题不满足最优化原理,那么也就不能用动态规划来解决。但是我们可以把它转化为判定性问题,用递推来解决。


设dp[k][i]为bool型数组,表示从1点到k点长度mod4为i的路径是否存在,设len[k][i]表示从第k-1到第k点之间的第i条边的长度。那么就有


    bubuko.com,布布扣


显然边界条件是:

    bubuko.com,布布扣

那么结果就是使bubuko.com,布布扣为真的最小的i的值。

上面的动态规划方程是有问题的。因为i-len[k][1]可能为负数,数组可能越界。

应该是:


为什么会是dp[k-1][ (sk-len[k][i]) % 4] 这个表达式呢。

其实sk=(s(k-1) +len[k][i] )%4;

所以通过sk去求s(k-1)的时候   s(k-1) + len[k][i] =sk + 4*E (E为整数 0 或1)

所以 s(k-1) =( sk +4 *E - len[k][i])% 4 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值