1997. 访问完所有房间的第一天
题目链接:1997. 访问完所有房间的第一天
代码如下:
cpp
//动态规划
//参考leetcode官方题解
class Solution
{
public:
int firstDayBeenInAllRooms(vector<int>& nextVisit)
{
//定义dp[i]表示从奇数次到房间i,到奇数次到达房间i+1所需要的天数
vector<int> dp(nextVisit.size());
dp[0]=2;//初始化原地待一天+访问下一个房间一天
for(int i=1;i<nextVisit.size();i++)
{
int to=nextVisit[i];
dp[i]=2+dp[i-1];
if(to!=0)
{
dp[i]=(dp[i]-dp[to-1]+mod)%mod;//避免负数
}
dp[i]=(dp[i]+dp[i-1])%mod;
}
return dp[nextVisit.size()-2];
}
private:
const int mod=1e9+7;
};