牛客 - 上楼梯(dp练习)

题目描述:
给定一个正整数int n,从0开始加到n,每次可增加1、2或3,直到其大于等于n,请返回一个数,代表加到n的方案的个数。保证n小于等于100000,并为了防止溢出,请将结果Mod 1000000007。

解析:
这道题就是一个加强版的斐波拉契数列,只不过从前两个变成了前三个的总和。另一个可能存在的问题就是取余数的问题,不过小心一点其实也简单。
代码如下:

class GoUpstairs {
public:
    int countWays(int n) {
        // write code here
        vector<int>dp(n+1, 1);
        dp[1] = 1;
        dp[2] = 2;
        if(n < 3)return dp[n];
        for(auto i=3; i<=n;i++){
            dp[i] = ((dp[i-1] + dp[i-2])%1000000007 + dp[i-3]) % 1000000007;
        }
        return dp[n];
    }
};

你可能感兴趣的:(dp,算法,动态规划)