该模型是动态规划模型中的一个重要分支,让我们来进行学习



class Solution {
public:
int tribonacci(int n) {
if(n==0) return 0;
if(n==1||n==2) return 1;
vector<int> f(n+1);
f[0]=0,f[1]=1,f[2]=1;
for(int i=3;i<=n;i++){
f[i]=f[i-1]+f[i-2]+f[i-3];
}
return f[n];
}
};



class Solution {
public:
const int a=1e9+7;
int waysToStep(int n) {
vector<int> ret(n+1);
if(n==1) return 1;
if(n==2) return 2;
if(n==3) return 4;
ret[1]=1,ret[2]=2,ret[3]=4;
for(int i=4;i<=n;i++){
ret[i]=((ret[i-1]+ret[i-2])%a+ret[i-3])%a;
}
return ret[n];
}
};



class Solution {
public:
int minCostClimbingStairs(vector<int>& cost) {
int n=cost.size();
vector<int> ret(n+1,0);
ret[1]=0,ret[0]=0;
for(int i=2;i<=n;i++){
ret[i]=min(ret[i-1]+cost[i-1],ret[i-2]+cost[i-2]);
}
return ret[n];
}
};



c
class Solution {
public:
int numDecodings(string s) {
int n=s.size();
vector<int> ret(n);
//初始化前两个位置
if(s[0]=='0') return 0;
else ret[0]=1;
if(n==1) return ret[0];
if(s[1]>='1'&&s[1]<='9') ret[1]+=ret[0];
int t=(s[0]-'0')*10+s[1]-'0';
if(t>=10&&t<=26) ret[1]+=1;
for(int i=2;i<n;i++){
if(s[i]>='1'&&s[i]<='9') ret[i]+=ret[i-1];
int m=(s[i-1]-'0')*10+s[i]-'0';
if(m>=10&&m<=26) ret[i]+=ret[i-2];
}
return ret[n-1];
}
};