Advertisement

牛客 - 题(dp练习)

阅读量:

设给定的正整数为int n(其中n≤1×1e5),我们需要计算从初始值为零开始逐步累加若干次后达到或超过n的所有可能方案的数量。在实现过程中需要注意的是,在计算最终结果时建议对1,999,997取模以防止数值溢出。

解析:
这道题本质上是对标准斐波那契数列的一种优化。相较于标准版本,在初始条件上做出了调整:相较于标准版本,默认情况下其初始条件发生了变化。
需要注意的是,在计算过程中可能会遇到取模操作的问题。不过只要细心处理即可实现。
代码如下:
初始值设定为a、b、c分别等于1、1、1。
然后依次计算后续各项。

复制代码
    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];

全部评论 (0)

还没有任何评论哟~