题目描述
C 同学准备做点什么来纪念学习编程这段激情燃烧的岁月, 他从家里拿来 了一块上等的牛肉干, 准备在上面刻下一个长度为 N 的只由大写字母"N" "O" "I"三种字符组成的字符串( 可以只有其中一种或两种字符) ,但 C 同学认为, 两个连续的"O"(即"OO")看起来就像发怒的眼睛, 十分不和谐。 请你编程计算一 共有多少种满足要求的不同字符串。
输入
一行一个整数 N( (1<=N<=40) ,表示要刻的字符串长度。
输出
输出仅一行, 一个整数, 表示满足要求的不同字符串数。
样例输入 复制
输入样例1:
1
输入样例2:
2
样例输出 复制
输出样例1:
3
输出样例2:
8
提示
【 数据范围】
30%的数据保证 1<=N<=15
60%的数据保证 1<=N<=25
100%的数据保证 1<=N<=40
#include<bits/stdc++.h>
using namespace std;
long long n,a[41]={1},b[41]={1},c[41]={1},ans[45]={3};
int main()
{
cin>>n;
a[1]=1;
b[1]=1;
c[1]=1;
ans[1]=3;
for(int i=2;i<=n;i++)
{
a[i]=a[i-1]+b[i-1]+c[i-1];
b[i]=a[i-1]+c[i-1];
c[i]=a[i-1]+b[i-1]+c[i-1];
ans[i]=a[i]+b[i]+c[i];
}
cout<<ans[n];
return 0;
}