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).

  • 相关阅读:
    Maven 集成Tomcat插件
    dubbo 序列化 问题 属性值 丢失 ArrayList 解决
    docker 中安装 FastDFS 总结
    docker 从容器中拷文件到宿主机器中
    db2 相关命令
    Webphere WAS 启动
    CKEDITOR 4.6.X 版本 插件 弹出对话框 Dialog中 表格 Table 自定义样式Style 问题
    SpringMVC JSONP JSON支持
    CKEDITOR 3.4.2中 按钮事件中 动态改变图标和title 获取按钮
    git回退到远程某个版本
  • 原文地址:https://www.cnblogs.com/khan724/p/4216900.html
Copyright © 2011-2022 走看看