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×rx−1≤fi+changeTime≤2×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) (x≤20)的最小值。
然后转移即可。
时间复杂度: 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]