动态规划-最小调整代价

题目
  • 给一个整数数组,调整每个数的大小,使得相邻的两个数的差不大于一个给定的整数target,调整每个数的代价为调整前后的差的绝对值,求调整代价之和最小是多少。

  • 输入: [3,5,4,7], target=2
    输出: 1

  • 注意事项
    你可以假设数组中每个整数都是正整数,且小于等于100。

分析
  • 分析可知,这是一道最优化的题目,且若该最优解由众多相似的自问题组成:某一位上的数字大小调整。此问题具有最优子结构性质,考虑用动态规划解题。
  • 刻画子问题空间的好经验是:保持子问题空间尽可能的简单,只在必要时才扩展它;
  • 此问题中,长度为n时的最小代价不只与相邻的子问题相关,即不可能使用一阶动态规划解决该问题,需要使用二阶动态规划。
  • 利用自底向上法,从最小子问题开始,利用二维数组保存每一个子问题的最小代价。
  • 由于每一个整数的范围都是 1~100,则对于最小的子问题,只含有一个数字的数组,有100种结果,即每一个子问题的结果都可能有100种,子问题的最优解是100个结果中的最小值。
  • d p [ i ] [ j ] dp[i][j] dp[i][j]表示问题规模为 i i i的子问题,结果为 j j j的调整代价。A表示数组。由于设置了调整区域值为target,则,对于调整结果为 j j j的子问题,只用考虑规模为 i − 1 i-1 i1的子问题种结果为K的部分,其中 m a x ( 0 , j − t a r g e t )
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值