6011. 完成比赛的最少时间(dp)

Posted Harris-H

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了6011. 完成比赛的最少时间(dp)相关的知识,希望对你有一定的参考价值。

6011. 完成比赛的最少时间(dp)

注意到第 i i i圈用时必须小于等于 f i + c h a n g e T i m e f_i+changeTime fi+changeTime,否则不是更优的。

因此 f r × r x − 1 ≤ f i + c h a n g e T i m e ≤ 2 × 1 0 5 f_r\\times r^x-1\\le f_i+changeTime\\le 2\\times 10^5 fr×rx1fi+changeTime2×105

因此 x x x最大是 20 20 20,因为 2 20 > 1 0 6 2^20>10^6 220>106

因此每个轮胎不会用超过连续 20 20 20圈。

因此可以预处理连续跑 x x x ( x ≤ 20 ) (x\\le 20) (x20)的最小值。

然后转移即可。

时间复杂度: O ( n × 20 ) O(n\\times 20) O(n×20)

class Solution 
public:

    int minimumFinishTime(vector<vector<int>>& a, int ct, int cnt) 
        vector<long long>f(cnt+1,0x3f3f3f3f);
        vector<long long>g(21,INT_MAX/2);
        f[0] = -ct;
        for(auto v:a)
            long long val = v[0];
            long long tot = 0;
            for(int i=1;val<=v[0]+ct;val*=v[1],i++)
                tot+=val;
                g[i]=min(g[i],tot);
            
        
        for(int i=1;i<=cnt;i++)
            for(int j=1;j<=min(20,i);j++)
                f[i] = min(f[i],f[i-j]+g[j]);
            
            f[i]+=ct;
        
        return f[cnt];
    
;

以上是关于6011. 完成比赛的最少时间(dp)的主要内容,如果未能解决你的问题,请参考以下文章

Codeforces 698A - Vacations - [简单DP]

LeetCode 1986. 完成任务的最少工作时间段(状压dp,子集枚举)

DP+拓扑关键子工程

DP Intro - Tree DP Examples

LeetCode 2383. 赢得比赛需要的最少训练时长

STAT6011/7611/8305