计蒜客课程竞赛入门--蒜头爬楼梯 转代码

 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,则与二层到三层的方
案重叠,故上式成立;
posted @ 2016-06-17 09:54  水天异色  阅读(370)  评论(0)    收藏  举报