[动态规划]下载插件中关于dp[(i+1)/2]+1的理解

小扣打算给自己的 VS code 安装使用插件,初始状态下带宽每分钟可以完成 1 个插件的下载。假定每分钟选择以下两种策略之一:

  • 使用当前带宽下载插件
  • 将带宽加倍(下载插件数量随之加倍)
    请返回小扣完成下载 n 个插件最少需要多少分钟。

注意:实际的下载的插件数量可以超过 n 个

在这里插入图片描述

class Solution {
public:
    //关于dp[(i+1)/2]+1? 
    // 这里不要考虑速度去理解!!
    // 假设dp[5] = 4,也就是表示在这时的速度是能够在4min处理5个的,那如果我不加速,
    // 其实就是8分钟处理10个,但是,我们知道插件加速就是速度*2,即速度加倍,
    // 现在我想带宽加倍,让速度加倍使得能够4min处理10个,如此就是dp[(i+1)/2],
    // 加速还花了1min,所以加上1
    // 所以 dp[(i+1)/2]+1 表示我要用同样的时间做两倍的事情,但前提需要1min来加速
    int leastMinutes(int n) {
        vector<int> time(n+1);
        time[0] = n;
        if(n==1) return 1;
        if(n>1){  
            for(int i = 1;i<=n;i++){
                time[i] = min(time[i-1]+1,time[(i+1)/2]+1);
            }
        }
        return time[n];
    }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值