友谊长存(递推)
来源:互联网 发布:面试算法题 编辑:程序博客网 时间:2024/04/30 00:25
友谊长存
时间限制(普通/Java) : 1000 MS/ 3000 MS 运行内存限制 : 65536 KByte
总提交 : 180 测试通过 : 74
总提交 : 180 测试通过 : 74
描述
YCC XHB ZXY在长期的革命生活中建立了深厚的友谊,于是ZXY找来一个金属条,打算刻下一段字符,长度为n,来纪念这一段激情燃烧的岁月。
这段字符只会包含三种字符:分别是三个人姓名拼音的首字母:X Y Z,但是ZXY觉得XX会让人有邪恶的联想,所以禁止有连续的X出现的出现。
现在ZXY想知道一共有几种不同的刻法,你能帮助他吗?
输入
第一行为数字T;
在接下来的T行中,每行都有一个整形数字n,代表字符串的长度。 (0 < n < 21)
输出
对于每个n,输出长度为n的字符串共有多少种符合情况的组合方式
样例输入
2
1
3
样例输出
3
22
题目分析:
设f[i]表示长度为 i 的的字符串的的组合方式的个数,题目就是要求长度为 n 的字符串的组合方式个数 f[n],由题可知,第 n 位字符只有三种可能 X,Y,Z。
1. 当第 n 位字符是 X 时,对于 n-1 位只能是Y,Z两种情况,而对于 n-2 位则没有限制。
2. 当第 n 位字符是 Y,Z 时,对于 n-1 位没有限制。
所以:f[n] = 2*f[n-1] + 2*f[n-2]; 就是所求的递推公式。
代码如下:
#include <stdio.h>int main (){int f[22];f[1]=3,f[2]=8;for (int i=3;i<=21;i++)f[i] = 2*(f[i-1]+f[i-2]);int t,a;scanf ("%d",&t);while (t--){scanf ("%d",&a);printf ("%d\n",f[a]);}return 0;}
0 0
- 友谊长存(递推)
- 友谊长存-八年级作文
- 人生于世上有几个知己,多少友谊能长存
- 友谊
- 友谊
- 友谊
- HDU 5761 友谊的小船 (多校)
- poj1664 (递推)
- 核电站(递推)
- poj1664(递推)
- hdu2524(递推)
- HDU2045 (递推)
- hdu1207(递推)
- hdu1267(递推)
- Triangles(递推)
- POJ2229 (递推)
- hdu2050(递推)
- Tiling (递推)
- 图书管理系统
- 如何才能恢复手机被删除的短信呢
- Does Java pass by reference or pass by value?
- Spring4 SpringMVC Hibernate4 Freemaker 整合例子
- hadoop学习;block数据块;mapreduce实现例子;UnsupportedClassVersionError异常;关联项目源码
- 友谊长存(递推)
- 如何选用软件找回丢了的文件
- 测试
- 一个简单迭代器的实现。。
- 彻底理解ThreadLocal
- 括号匹配问题——stack的利用
- 完全卸载VMware
- 嵌入式linux基本环境配置
- 电脑给山寨内存卡清理垃圾丢失了数据怎么恢复