作业四 递推求解

记录点滴。

  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 */
时间: 2024-12-28 01:56:20

作业四 递推求解的相关文章

算法之动态规划(递推求解一)

这篇博客主要讲的是动态规划入门,即动态规划的思想,并且再讲解动态规划的最简单的一个方法. 首先,什么是动态规划? 动态规划是通过拆分问题,定义问题状态和状态之间的关系,使得问题能够以递推(或者说分治)的方式去解决.其实就是分解问题,分而治之.可能这样说大家都不太理解,其实这个有点类似于数学中的递推公式.来举一个简单的例子,看下边这个题: N阶楼梯上楼问题:一次可以走两阶或一阶,问有多少种上楼方式. 这就是动态规划就简单的一个列子.拿到这个题,大家是不是都有点迷,这个到底怎么做?是不是没有思路,那

动态规划之递推求解

动态规划在B站上有个up主讲得不错,在此分享出来,如果对动态规划还比较懵逼的可以先去看看. https://www.bilibili.com/video/av16544031/?from=search&seid=11703697737879318733 https://www.bilibili.com/video/av18512769/?from=search&seid=6673249141547844536        利用递推解决问题,首先确定几个规模较小的问题答案.然后考虑如何由这

HDU 2041--超级楼梯(递推求解)

Description 有一楼梯共M级,刚开始时你在第一级,若每次只能跨上一级或二级,要走上第M级,共有多少种走法? Input 输入数据首先包含一个整数N,表示测试实例的个数,然后是N行数据,每行包含一个整数M(1<=M<=40),表示楼梯的级数. Output 对于每个测试实例,请输出不同走法的数量 Sample Input 2 2 3 Sample Output 1 2 这道题从逆向考虑,第m级的走法数量,就是第m-1级和第m-2级各自走法数量之和 1 #include<iostr

题目1205:N阶楼梯上楼问题(递推求解)

题目1205:N阶楼梯上楼问题 时间限制:1 秒 内存限制:128 兆 特殊判题:否 提交:4547 解决:1836 题目描述: N阶楼梯上楼问题:一次可以走两阶或一阶,问有多少种上楼方式.(要求采用非递归) 输入: 输入包括一个整数N,(1<=N<90). 输出: 可能有多组测试数据,对于每组数据,输出当楼梯阶数是N时的上楼方式个数. 样例输入: 4 样例输出: 5 #include<iostream> #include<stdio.h> #include<qu

递推趣题

在网上看到一个关于递推求解的课件,感觉里面的问题很经典有趣,层层递进,因此在这里记录一下. 1.在一个平面上有一个圆和n条直线,这些直线中的每一条在圆内同其他直线相交,假设没有三条直线相交于一点,试问这些直线将圆分成多少区域. 2.平面上有n条折线,问这些折线最多能将平面分割成多少块?(已知1—>2,2—>7) 3.设有n条封闭曲线画在平面上,而任何两条封闭曲线恰好交于两点,且任何三条封闭曲线不相交于同一点,问这些封闭曲线能把平面分割成的区域个数. 4.在2*n的长方形方格中,用n个1*2的骨

算法--递推策略

本文地址:http://www.cnblogs.com/archimedes/p/4265019.html,转载请注明源地址. 递推法是一种重要的数学方法,在数学的各个领域中都有广泛的运用,也是计算机用于数值计算的一个重要算法.这种算法特点是:一个问题的求解需一系列的计算,在已知条件和所求问题之间总存在着某种相互联系的关系,在计算时,如果可以找到前后过程之间的数量关系(即递推式),那么,从问题出发逐步推到已知条件,此种方法叫逆推.无论顺推还是逆推,其关键是要找到递推式.这种处理问题的方法能使复杂

用矩阵乘法优化递推

(有关矩阵乘法的基本规则请自行搜索) 引例:求斐波那契数列的第 n 项 mod 1000000007 的值,n <= 1018. 分析:斐波那契数列的递推式为 f(n) = f(n-1)+f(n-2),直接循环求出 f(n) 的时间复杂度是 O(n),对于题目中的数据范围显然无法承受.很明显我们需要对数级别的算法. 由于 f(n) = 1*f(n-1) + 1*f(n-2) 这样的形式很类似于矩阵的乘法,所以我们可以先把这个问题复杂化一下,将递推求解 f(n) 与 f(n-1) 的过程看作是某两

HDU 2049 不容易系列之(4)——考新郎 (递推,含Cmn公式)

不容易系列之(4)——考新郎 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 26788    Accepted Submission(s): 9813 Problem Description 国庆期间,省城HZ刚刚举行了一场盛大的集体婚礼,为了使婚礼进行的丰富一些,司仪临时想出了有一个有意思的节目,叫做"考新郎",具体的操作是

ACdream 1420 High Speed Trains【Java大数高精度 + 递推】

High Speed Trains Time Limit: 2000/1000MS (Java/Others) Memory Limit: 128000/64000KB (Java/Others) 链接:http://acdream.info/problem?pid=1420 Problem Description The kingdom of Flatland has n cities. Recently the king of Flatland visited Japan and was a