zoukankan      html  css  js  c++  java
  • 不容易系列之(3)—— LELE的RPG难题

    题目描述

    人称“AC女之杀手”的超级偶像LELE最近忽然玩起了深沉,这可急坏了众多“Cole”(LELE的粉丝,即"可乐"),经过多方打探,某资深Cole终于知道了原因,原来,LELE最近研究起了著名的RPG难题: 有排成一行的n个方格,用红(Red)、粉(Pink)、绿(Green)三色涂每个格子,每格涂一色,要求任何相邻的方格不能同色,且首尾两格也不同色.求全部的满足要求的涂法。
    以上就是著名的RPG难题。
    如果你是Cole,我想你一定会想尽办法帮助LELE解决这个问题的;如果不是,看在众多漂亮的痛不欲生的Cole女的面子上,你也不会袖手旁观吧?

    输入

    输入数据包含多个测试实例,每个测试实例占一行,由一个整数N组成,(0 < n <= 50)。

    输出

    对于每个测试实例,请输出全部的满足要求的涂法,每个实例的输出占一行。

    示例输入

    1
    2

    示例输出

    3
    6

    提示

    View Code
     1 #include<iostream>
     2 using namespace std ;
     3 int main()
     4 {
     5     long long f[51] ;//注意f[]的范围
     6     int n, i ;
     7     while(cin>>n)
     8     {
     9         f[0] = 0 ;
    10         f[1] = 3 ;
    11         f[2] = 6 ;
    12         f[3] = 6 ;
    13         for(i=4; i<=n; i++)
    14         {
    15             f[i] = f[i-1] + 2*f[i-2] ;
    16         }
    17         cout<<f[n]<<endl ;
    18     }
    19     return 0 ;
    20 }

    找出递推公式,并注意数的范围,一般定义为long long

    首先易知f(1)=3;f(2)=6;f(3)=6;f(4)=18;

    现在考虑n>3的情况,若第n-1个格子和第一个格子不同,则为f(n-1);

    若第n-1个格子和第1个格子相同,则第n-2个格子和第一个格子必然不同,此时为f(n-2)再乘第n-1个格子的颜色数,很显然第n-1个格子可以是第一个格子(即第n-2个格子)的颜色外的另外两种,这样为2*f(n-2);

    因此总的情况为f(n)=f(n-1)+2*f(n-2);

  • 相关阅读:
    POJ2778 DNA Sequence AC自动机上dp
    codeforces732F Tourist Reform 边双联通分量
    codeforces786B Legacy 线段树优化建图
    洛谷P3588 PUS 线段树优化建图
    codeforces1301D Time to Run 模拟
    codeforces1303B National Project 二分或直接计算
    codeforces1303C Perfect Keyboard 模拟或判断欧拉路
    codeforces1303D Fill The Bag 二进制应用+贪心
    python之路——使用python操作mysql数据库
    python之路——mysql索引原理
  • 原文地址:https://www.cnblogs.com/yelan/p/2876930.html
Copyright © 2011-2022 走看看