计蒜客课程竞赛入门--蒜头爬楼梯 转代码
1 #include<stdio.h> 2 int dp[100]; 3 int calStepDP(int n) 4 { 5 //动态规划,自底向上 6 dp[0] = 0; 7 dp[1] = 1; 8 dp[2] = 2; 9 int i; 10 for(i=3;i<=n;i++) 11 { 12 dp[i] = dp[i-1] + dp[i-2]; 13 } 14 return dp[n]; 15 } 16 int main(int argc, char **argv) { 17 int n; 18 scanf("%d",&n); 19 int ans = calStepDP(n); 20 printf("%d\n",ans); 21 return 0; 22 }
dp(n)=dp(n-1)+dp(n-2):
记录下爬每层时的情况个数,如:2层两种情况,1层一种情况.2层和3层相差1层,1层则相差两层,故第三层可以由1层直接加两层得到
也可以由二层直接加一层得到,而不能由一层加两次一层,因为二层中有一种方案是1+1=2,如果在第一层加两次1,则与二层到三层的方
案重叠,故上式成立;

浙公网安备 33010602011771号