• HDOJ-2047


    阿牛的EOF牛肉串

    Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
    Total Submission(s): 29999    Accepted Submission(s): 14095


    Problem Description
    今年的ACM暑期集训队一共有18人,分为6支队伍。其中有一个叫做EOF的队伍,由04级的阿牛、XC以及05级的COY组成。在共同的集训生活中,大家建立了深厚的友谊,阿牛准备做点什么来纪念这段激情燃烧的岁月,想了一想,阿牛从家里拿来了一块上等的牛肉干,准备在上面刻下一个长度为n的只由"E" "O" "F"三种字符组成的字符串(可以只有其中一种或两种字符,但绝对不能有其他字符),阿牛同时禁止在串中出现O相邻的情况,他认为,"OO"看起来就像发怒的眼睛,效果不好。

    你,NEW ACMer,EOF的崇拜者,能帮阿牛算一下一共有多少种满足要求的不同的字符串吗?

    PS: 阿牛还有一个小秘密,就是准备把这个刻有 EOF的牛肉干,作为神秘礼物献给杭电五十周年校庆,可以想象,当校长接过这块牛肉干的时候该有多高兴!这里,请允许我代表杭电的ACMer向阿牛表示感谢!

    再次感谢!
     
    Input
    输入数据包含多个测试实例,每个测试实例占一行,由一个整数n组成,(0<n<40)。
     
    Output
    对于每个测试实例,请输出全部的满足要求的涂法,每个实例的输出占一行。
     
    Sample Input
    1
    2
     
    Sample Output
    3
    8

    递推问题:

    递推问题的重点和难点一向是找递推公式,递推公式也是解递归题目的核心。

    本题中字符串的每一点有E、O、F三种选择,但不能存在连续O的情况。我们不妨设长度为n-1时末尾为O的字符串为O(n-1)个,末尾不为O的字符串有t(n-1)个。则有a[n]=2*O(n-1)+3*t(n-1)。(末尾为O时可加只有E、F两种情况,末尾不为O时即为全部三种)。整理上式可得a[n]=2*[O(n-1)+t(n-1)]+t(n-1)、无论n等于几,我们都只有末尾为O和末尾不为O两种情况,即两种相加即为a[n],所以a[n]=2*a[n-1]+t(n-1)。我们现在来想一下,t(n-1)为n-1时末尾不为O,即末尾为E、F两种情况,即等于a[n-2]*2。所以整理得递推公式为a[n]=2*(a[n-1]+a[n-2])。

    附AC代码:

     1 #include<iostream>
     2 #include<cstdio>
     3 using namespace std;
     4 
     5 int main(){
     6     int n,i;
     7     long long a[40];
     8     a[1]=3;
     9     a[2]=8;
    10     for(i=3;i<40;i++){
    11         a[i]=2*(a[i-1]+a[i-2]);
    12     }
    13     while(~scanf("%d",&n)){
    14         printf("%lld
    ",a[n]);
    15     }
    16     return 0;
    17 } 
  • 相关阅读:
    python函数执行超时处理的两种方法
    Flask常用方法函数汇总
    夜神模拟器操作
    简单auto.js自动化处理andorid手机案例
    TCP-三次握手和四次挥手简单概述
    android手机执行shell脚本
    接口测试要测试什么?怎么测?
    python unittest单元测试
    python webdriver 测试框架--数据驱动之Excel驱动
    顺时针打印矩阵
  • 原文地址:https://www.cnblogs.com/Kiven5197/p/5513606.html
Copyright © 2020-2023  润新知