动态规划问题一帮助理解

问题说明

 * 有 n 个学生站成一排,每个学生有一个能力值,
 * 牛牛想从这 n 个学生中按照顺序选取 k 名学生,
 * 要求相邻两个学生的位置编号的差不超过 d,
 * 使得这 k 个学生的能力值的乘积最大,你能返回最大的乘积吗?

为了方便理解,我们假设每个学生的能力值都是正数

  • 一共有n个学生,我们用正整数数组arr[n]表示

  • 需要在n个学生中找到k个人的问题其实可以理解为:

    1. 已经找到了最后一个人的位置
    2. 再找到前面k-1个人的位置即可
  • 不妨用一个select[k][n]数组表示

    1. select[i][j]:表示一共选择了i+1个人,且最后一人位置在j时的乘积
  • 那么select[i][j]该怎么表示呢?

    1. 我们可以知道select[0][0] ~ select[0][n-1]表示只选择一个人且这个人位置在任意时的乘积,
      select[0][0]的值是等于arr[0]的,同理select[0][j]=arr[j]
      • 也就是当我们画出select数组时,select[0]这一行的所有数据都可以确定
        我们假设arr={5,2,3,8,1},n=5,k=3,d=2
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值