1883. 准时抵达会议现场的最小跳过休息次数
代码如下:
//参考:https://leetcode.cn/problems/minimum-skips-to-arrive-at-meeting-on-time/solutions/2746611/jiao-ni-yi-bu-bu-si-kao-dong-tai-gui-hua-gxd2
class Solution {
public:
int minSkips(vector<int>& dist, int speed, int hoursBefore)
{
if(accumulate(dist.begin(),dist.end(),0)>(long long)speed*hoursBefore)
{
return -1;
}
int n=dist.size();
vector<vector<int>> memo(n,vector<int>(n,-1));//-1代表没计算过
function<int(int,int)> dfs=[&](int i,int j)->int
{
if(j<0)//递归边界
{
return 0;
}
auto &res=memo[i][j];
if(res!=-1) return res;
res=(dfs(i,j-1)+dist[j]+speed-1)/speed*speed;
if(i) res=min(res,dfs(i-1,j-1)+dist[j]);
return res;
};
for(int i=0;;i++)
{
if(dfs(i,n-2)+dist[n-1]<=(long long)speed*hoursBefore)
return i;
}
}
};