#include <iostream>
#include <algorithm>
#include <cstring>
#include <map>
#include <vector>
using namespace std;
const int N=1e3;
int a[N+20][150],b[N+20][150]; //a[i] i次变化后1的个数 ,b[i] i步操作后00的个数
// 0->10 1->01 初始为1,求i步后00的个数
//1->01->1001 1变化2步后有00出现
//00->1010->01100110 00变化两步后有00出现
void init()
{
a[0][0]=a[1][0]=1;
memset(b,0,sizeof(b));
for(int i=2;i<=N;i++)
{
for(int j=0;j<=140;j++)
{
a[i][j]+=a[i-1][j]*2;
//n步后 长度为2^n 1个数为2^(n-1)
b[i][j]+=b[i-2][j]+a[i-2][j];
a[i][j+1]+=a[i][j]/10000;//每位存4位数
a[i][j]%=10000;
b[i][j+1]+=b[i][j]/10000;
b[i][j]%=10000;
}
}
}
int main()
{
init();
int n;
while(cin>>n)
{
int i;
for(i = 140; i > 0 && b[n][i] == 0; i--);
printf("%d", b[n][i]);
for(i--; i >= 0; i--) printf("%04d", b[n][i]);
printf("\n");
}
return 0;
}
uva 1647 高精度+递推
最新推荐文章于 2018-08-22 07:51:39 发布