递推求解

记录点滴。

  1 /*
  2 2015.6    HT
  3 ACM Work_4
  4 
  5 */
  6 #include <iostream>
  7 #include<algorithm>
  8 using namespace std;
  9 
 10 /*
 11 超级楼梯
 12 一楼梯共M级,刚开始在第一级,每次只能跨上一级或二级
 13 要走上第M级,共有多少种走法?
 14 输入每行包含一个整数M(1<=M<=40),表示楼梯的级数
 15 
 16 直接构造一个40以内的斐波那契数列即可,f1=1,f2=1
 17 */
 18 //int sum, m, a[41];
 19 //void f()
 20 //{
 21 //    a[1] = 1;
 22 //    a[2] = 1;
 23 //    for (int i = 3; i <= 40; i++)
 24 //        a[i] = a[i - 1] + a[i - 2];
 25 //}
 26 //
 27 //int main()
 28 //{
 29 //    int n;
 30 //    f();
 31 //    cin >> n;
 32 //    while (n--)
 33 //    {
 34 //        cin >> m;
 35 //        cout << a[m] << endl;
 36 //    }
 37 //    return 0;
 38 //}
 39 
 40 
 41 
 42 /*
 43 不容易系列之(3)—— LELE的RPG难题
 44 有排成一行的n个方格,用红(Red)、粉(Pink)、绿(Green)三色涂每个格子
 45 每格涂一色,要求任何相邻的方格不能同色,且首尾两格也不同色.求全部的满足要求的涂法
 46 (0<n<=50)
 47 
 48 1.前面n-1个方格填好了色,有f(n-1)种情况,此时第n-1个跟第一个颜色一定不一样,所以第n个只有一种选择
 49 2.对前面n-2个方格填好色,有f(n-2)种情况,第n-1个空格颜色跟第一个颜色一样,最后第n个方格可以填两种颜色,所以是 2*f(n-2)
 50 推出f(n)=f(n-1)+2(n-2)    n>=4
 51 */
 52 //int main()
 53 //{
 54 //    int i;
 55 //    // int会溢出
 56 //    __int64 d[51] = { 0, 3, 6, 6 };
 57 //    for (i = 4; i < 51; i++)
 58 //        d[i] = d[i - 1] + 2 * d[i - 2];
 59 //    while (cin >> i)
 60 //        cout << d[i] << endl;
 61 //
 62 //    return 0;
 63 //}
 64 
 65 
 66 
 67 /*
 68 折线分割平面
 69 f(n) = 2n^2-n+1
 70 
 71 封闭曲线分割平面
 72 f(n) = n^2-n+2
 73 
 74 平面分割空间
 75 f(n) = (n^3+5n)/6+1
 76 */
 77 
 78 
 79 
 80 /*
 81 悼念512汶川大地震遇难同胞——重建希望小学
 82 学校教室的长度为n米,宽度为3米,现在我们有2种地砖,规格分别是1米×1米,2米×2米,
 83 如果要为该教室铺设地砖,请问有几种铺设方式呢?
 84 
 85 s[n]=s[n-1]+2*s[n-2]
 86 */
 87 int main()
 88 {
 89     int n[31], i, m, t;
 90     n[1] = 1;
 91     n[2] = 3;
 92     for (i = 3; i <= 30; ++i)
 93     {
 94         n[i] = n[i - 1] + n[i - 2] * 2;
 95     }
 96     cin >> t;
 97     while (t--)
 98     {
 99         cin >> m;
100         cout << n[m] << endl;
101     }
102     return 0;
103 }
104 
105 
106 
107 /*
108 统计问题
109 你可以向左走,可以向右走,也可以向上走
110 走过的格子立即塌陷无法再走第二次,求走n步不同的方案数
111 
112 设往上走的步数为a(n),往左或往右走的步数为b(n)
113 f(n)=a(n)+b(n)
114 a(n)=a(n-1)+b(n-1), b(n)=2*a(n-1)+b(n-1)
115 化简得 f(n) = 2*f(n-1) + f(n-2)
116 */

 

posted @ 2015-06-08 22:40  ht-beyond  阅读(463)  评论(0编辑  收藏  举报