zoukankan      html  css  js  c++  java
  • 递推专题笔记

      递推说白了就是找规律,然后写出他的递推方程,有的还可以写出通项公式,然后准确预测出第n项的值。因为这种规律存在着前因后果的关系,即是说,后一项的结果往往和前一项或前几项有着某种联系。这种联系不仅仅存在于数字之中,世间万物亦是如此。

      由于,递推是深入理解动态规划的基础,就我目前的水平,看到动态规划就如看到tiger一般,完全不知所以,所以为了找回在动态规划前的自信,我打算在回家之前,找一个递推专题练练手。现记录如下:

      

      心得:

      1. 既然是递推题,那么肯定有递推方程,那么同样有规律可循,既然有规律。所以,若一时做不出来。我们可以用计算机枚举出比较的小的情况,然后找出其中规律。最后AC之。

      2.有时,当n比较大时,递推起来肯定会耗时,就有可能造成TLE,那么这时不要忘了我们的矩阵君。把数的公式用矩阵表示出来再算,那是大大的方便啊。

      整个专题地址:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=65818#overview

      1. HDU 2041

      分析:容易知道,可以有两种方式走到第m阶,一是从m-1阶走一步,二是从m-2阶走两步,故F(m)=F(m-1)+F(m-2)。其中边界条件F(1)=0,F(2)=1。这道题用递归做,离线也会超时。

      2.  HDU 2042

      分析:这题直接根据题意列公式即可:3*Pow(2, n)+2-Pow(2, n+1)即是答案。

      3.     HDU 2044

      分析:我们用F(n)表示从蜂房1走到蜂房n的路线总数,根据题目条件可得,走到蜂房n只可能经过蜂房n-1和蜂房n-2,故有F(n)=F(n-1)+F(n-2)。题目要求从蜂房a到蜂房b的路线,只需分别把a,b向左移动a-1即可,即F(b-a+1)就是所求。

      4.  HDU 2045

      分析: 共三种颜色,相邻和首尾不能同色。根据题意可作出下图:

    红线是非法情况,F(n)表示长为n的方格的总的合法染色数,根据图很容易知道,F(n-1)的每个合法组合分别在F(n)中会产生一个非法组合和一个合法组合,非法组合在F(n)中产生两个合法组合,所以可得公式:F(n)=Pow(2,n-1)-F(n-1)。

      我们还可以继续分析上图,F(n-1)的合法组合在F(n)中产生F(n-1)个合法组合,而其余的合法组合是F(n-1)的非法组合产生的,共有2*F(n-1)的非法组合,而F(n-1)的非法组合等于F(n-2)。故有:F(n)=F(n-1)+2*F(n-2)。

      更一般的:假设现有k种颜色,其余条件不变。有公式:F(n)=(k-2)*F(n-1)+(k-1)*F(n-2),{n>=4}。F(1)=k, F(2)=k*(k-1), F(3)=K*(k-1)*K(k-2)。

      5. HDU 2018

      分析:设F(n)表示第n年的牛的总数,显然有关系式:F(n)=F(n-1)+F(n-3),边界条件为F(1)=1,F(2)=2,F(3)=3。表示今年牛的总数等于去年牛的总数加上今年新生的牛的总数。

      6. HDU 2563

      分析:走n步的不同走法可以转化为走n步可以到达哪些点?这些点分又为两种情况讨论,一是这些点有两个方向可以走,二是这些点有三个方向可以,分别叫2方向点和3方向点,用h(n),g(n)表示走n步可到的3方向点数和2方向点数,f(n)=h(n)+g(n)表示走n步可以到达的总点数。经过分析发现,每一个3方向点可产生1个3方向点和2个2方向点,每一个2方向点可产生1个3方向点和一个2方向点。所以可得公式:h(n)=h(n-1)+g(n-1), g(n)=2*h(n-1)+g(n-1)。

       7. HDU 2046

      分析:初看的时候,这道很是复杂,不过仔细琢磨之后就会发现,这道题可以转化为把一个数n分解成1,2相加的形式的总数。然后再列出前几项其实就是一个斐波那契数。F(n)=F(n-1)+F(n-2),边界条件为F(1)=1,F(2)=2。

      8. HDU 1267

      分析: 由题意可得,给你m个H和n个D来组和并要满足要求,问你有多少中组合方法?我们可以用一个二位数组dp[m][n]来表示m个H和n个D的组合数,我们知道,他是由两种情况相加得到的,即:dp[m-1][n]的后面加个h和dp[m][n-1]后面加个d得到.(看了题解~~~),边界条件为:dp[1][1]=1,dp[i][0]=1,dp[i][1]=i;

       9. HDU 2190

      分析: 长为f(n)的情况由两种情况组成,(1)对于f(n-1),第n行只有3行1*1的砖这一种情况,(2)对于f(n-2)有三种情况a、上边一个2*2,下边两个1*1;b、上边两个1*1,下边一个2*2;c、六个1*1;不过c情况跟第一种情况重复了,所以共2*f[i-2]种.故f(n)=f(n-1)+2*f(n-2).

  • 相关阅读:
    23、Linux实操篇——RPM与YUM
    22、Linux实操篇——进程管理(重点)
    21、Linux实操篇——网络配置
    20、Linux实操篇——磁盘分区、挂载
    19、Linux实操篇——组管理和权限管理
    18、实操篇——实用指令
    17、实操篇——用户管理
    UVALive 2521 Game Prediction 题解
    UVALive 2517 Moving Object Recognition(模拟)
    UVALive 2324 Human Gene Functions(动态规划)
  • 原文地址:https://www.cnblogs.com/khan724/p/4216900.html
Copyright © 2011-2022 走看看