杭电2045

来源:互联网 发布:lock java 详解 编辑:程序博客网 时间:2024/06/03 16:57

注意:和杭电2043 一样,结果太大要用64位处理

思路:用迭代的方法

要判断第n个元素和第一个元素是否一样,要根据第(n-1)个元素,当它与第一个元素相同时,此时第n个元素有两种,前(n-2)个元素的种类有num(n-2);此时共有2*num(n-2)种;

当它不同时,此时第n个元素只有一种,前(n-1)个元素的种类有num(n-1);此时共有num(n-1)种;

所以num(n)=num(n-1)+2*num(n-2);

#include<iostream>
#include<cmath>
using namespace std;
int main()
{
 __int64 a[51];
 int n,i;
 a[1]=3;
 a[2]=6;
 a[3]=6;
 for(i=4;i<51;i++)
 a[i]=a[i-1]+2*a[i-2];
 while(cin>>n)
 {
  cout<<a[n]<<endl;
 }
}

原创粉丝点击