hdoj2047

来源:互联网 发布:mediainfo for mac 编辑:程序博客网 时间:2024/06/09 18:58
使用两个数组来递归,f数组表示n个元素的排列种类数,w数组表示f[n]中最后一个元素是O的种类数。
1)对于第n个元素的选择:如果第n-1个元素是O的话,那么第n个元素只有两种选择,如果第n个元素不是O的话就可以有三种选择了。
2)第n个元素是O的个数:如果第n-1个元素是O的话,那么第n个元素就不能是O了,所以第n个元素是O的个数等于前n-1个元素的排列数减去第n-1个元素是O的情况。
#include<iostream>
using namespace std;
int main()
{
 long long a[55],b[55];
 a[1]=3;
 a[2]=8;
 b[1]=1;
 b[2]=2;
 for(int i=3; i<55; i++)
 {
  a[i]=b[i-1]*2+(a[i-1]-b[i-1])*3;
  b[i]=a[i-1]-b[i-1];
 }
 int n;
 while(cin>>n)
  printf("%I64d\n",a[n]);
 return 0;
}