#初始化base case dp[0][0][...]=base case for 状态1in 状态1的所有数值: for 状态2in 状态2的所有数值: for ...: dp[状态1][状态2][...]=求最值(选择1,选择2,...) # 在每个列举出来的状态中通过求最值的方法得到当前状态的最大/最小选择。for循环列举出所有的状态。状态转移体现在f(z)=min(f(x),f(y))中,z=x+y z和x,y有关系,这样可以得到最后的min值
classSolution { public: intfib(int n){ if (n==0) return0; if (n==1) return1; vector<int> dp; dp[1]=1; dp[2]=1; for (int i=3;i<=n;i++){ dp[i]=(dp[i-1]+dp[i-2])%10000007; } return dp[n-1]; } };
classSolution { public: intfib(int n){ if (n==0) return0; if (n==1) return1; int prev=1; int curr=1; for (int i=3;i<=n;i++){ int sums= prev+curr; prev=curr; curr=sums; } return sums; } };