hdu-2045 简单递推 水

题意:

  一行长度为n的方格,只能使用三种颜色R、P、G来填充,且满足相邻方块不能同色,首尾方块不能同色。给出n,输出满足条件的着色方案数。

思路:

  简单递推,由n-1个方块推导出n个方块的情况,有以下两种情况:

    1.第n-1个方块与第1个方块不同色,满足条件。直接在n-1的满足基础上添加第n个,且第

n个只有一种选择。即F[n-1];

    2.第n-1个方块与第1个方块同色,不满足F[n-1],退至F[n-2],此时添加第n个方块时有两种选择。即F[n-2]*2。

  递推公式:F[n] = F[n-1] + 2 * F[n-2]

代码:

 1 #include<iostream>
 2 using namespace std;
 3 int main()
 4 {
 5     int n;
 6     long long f[55];
 7     f[1] = 3;
 8     f[2] = 6;
 9     f[3] = 6;    //注意f[3]不能用递推公式得出
10     for(int i = 4; i < 51; i++)
11     {
12         f[i] = f[i - 1] + 2 * f[i - 2];
13     }
14     while(cin >> n)
15     {
16         cout << f[n] << endl;
17     }
18     return 0;
19 }

原文地址:https://www.cnblogs.com/friend-A/p/9691646.html

时间: 2024-10-06 18:28:44

hdu-2045 简单递推 水的相关文章

HDU 2045(递推&amp;递归_B题)解题报告

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2045 ----------------------------------------------------------------------------------- 题意:3种颜色,方格涂色,从左到右,最后一个方格颜色不能和第一个方格颜色相等,相邻颜色不能相同. 思路:最开始思路想简单了,以为第一个方格3种颜色,第二个方格到倒数第二个方格都是2种选择,最后一个方格一种选择.但是,这种递推需要

hdu 5366 简单递推

记f[i]为在长度是i的格子上面至少放一个木桩的方法数.考虑第i个格子,有放和不放两种情况. 1.如果第i个格子放了一个木桩,则i - 1和i - 2格子上面不能放木桩,方案数为:f[i - 3] + 1 2.如果第i个格子没有放木桩,则方案数为:f[i - 1] 然后递推即可. 1 #include <iostream> 2 using namespace std; 3 4 typedef long long ll; 5 const int N = 61; 6 ll f[N]; 7 8 vo

(hdu step 3.1.3)母牛的故事(简单递推)

在写题解之前给自己打一下广告哈~..抱歉了,希望大家多多支持我在CSDN的视频课程,地址如下: http://edu.csdn.net/course/detail/209 题目: 母牛的故事 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 659 Accepted Submission(s): 481   Problem Descriptio

(hdu step 3.1.2)骨牌铺方格(简单递推:求用2*1的骨牌铺满2*n的网格的方案数)

在写题解之前给自己打一下广告哈~..抱歉了,希望大家多多支持我在CSDN的视频课程,地址如下: http://edu.csdn.net/course/detail/209 题目: 骨牌铺方格 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 744 Accepted Submission(s): 478   Problem Descriptio

(hdu step 3.1.1)超级楼梯(简单递推:从第1级到第m级有多少种走法,每次只能走一步或两步)

在写题解之前给自己打一下广告哈~..抱歉了,希望大家多多支持我在CSDN的视频课程,地址如下: http://edu.csdn.net/course/detail/209 题目: 超级楼梯 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 652 Accepted Submission(s): 483   Problem Description

hdu4165(简单递推,实则卡特兰数的应用)

这道题之前自己做的时候并没有反应过来是求卡特兰数,当时是按递推来想的.后来查了下HDU4165,结果一看大标题就说是卡特兰数,自己想了想,还真是那么回事.主要还是对于卡特兰数用的不多,也就当时没立马反应过来了.下面介绍这道题我的思路,然后对卡特兰数再做一些补充. 本题题意:罐子里有N片相同的药片,开始的时候药片都是完整的一整片.然后一个每天从中任意取一片,如果该药片是完整的一整片,那么他会吃点半片,然后将剩余半片扔回罐里,如果恰好是半片,那他直接吃掉拿出来的半片.显然2N天后,他吃完全部N片药片

hdu5306The mook jong(简单递推)

BC #50#简单递推 看了很多讲解的递推没有很懂,还好zzuspy思路简单清晰: f(n):要放n个木桩,先考虑最后一个板砖如果放的话,the last one的前两个并不能放木桩,所以前n-3个板砖如果放木桩的话有f(n-3)中方案,如果不放木桩的话,有一种方案: 最后一个板砖如果不放的话,是f(n-1)中方案: 所以f(n)=f(n-1)+f(n-3)+1; 还有一个hack点是爆Int的问题,但是比赛时并没有找到可以hack的代码T-T The mook jong Accepts: 50

hdu 1249 三角形 (递推)

三角形 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 4390    Accepted Submission(s): 2957 Problem Description 用N个三角形最多可以把平面分成几个区域? Input 输入数据的第一行是一个正整数T(1<=T<=10000),表示测试数据的数量.然后是T组测试数据,每组测试数据只

HDU 2013(递推&amp;递归_D题)解题报告

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2013 ----------------------------------------------------------------------------------- 题意:每天吃掉一半再多一个,给出第几天吃到只剩一个,求开始时的数量. 思路:递推.按照每天的处理方式反向处理一下,最终得到结果. 代码: #include<cstdio> #include<cstring> #in