classSolution:defminimumTime(self, time: List[int], totalTrips:int)->int:defcheck(maxV :int):
res =0for t in time:
res += maxV // t
return res >= totalTrips
l =min(time)
r =min(time)* totalTrips
while l < r :
mid = l + r >>1if check(mid)==True:
r = mid
else:
l = mid +1return l
完成比赛的最少时间
typedeflonglong ll;classSolution{public:intminimumFinishTime(vector<vector<int>>& tires,int changeTime,int numLaps){// 单个轮胎跑i圈需要的最小时间
vector<int>mintimes(20,1e9);for(auto& v : tires){
ll f = v[0];
ll r = v[1];
ll fir = f + changeTime;for(int i =1, sum = fir; f <= fir; i++, f *= r, sum += f){
mintimes[i]=min(mintimes[i], sum);}}// dp[i]表示跑i圈的最小消耗时间
vector<int>dp(numLaps +1,1e9);
dp[0]=0;for(int i =1; i <= numLaps;++i){for(int j =1; j <=min(19, i);++j){
dp[i]=min(dp[i], dp[i-j]+ mintimes[j]);}}// 记得减去换轮胎的时间一次。return dp[numLaps]- changeTime;}};