Esquema de mosaico (recursividad) (alta precisión)

Esquema de mosaico

Descripción del Título
Inserte la descripción de la imagen aquí

Ideas para resolver problemas

Sea f (i) el número de esquemas de la matriz 2 * i

Coloque un 2 * 1 verticalmente en la i-ésima columna, el número de planos es f (i-1),
la i-ésima columna y la i-1a columna, coloque un 2 * 2, el número de planes es f ( i-2)
la i-ésima columna Coloque un 1 * 2 horizontalmente con la i-1a columna, y el número de planos es f (i-2)

La fórmula tardía
f [i] = f [i - 2] ∗ 2 + f [i - 1] f [i] = f [i-2] * 2 + f [i-1]f [ i ]=f [ yo-2 ]2+f [ yo-1 ]
Valor inicial: f [0] = f [1] = 1 f [2] = 3

Debido a que el n máximo de esta pregunta es 250 , explotará durante mucho tiempo,
por lo que la precisión es alta

Código AC

#include<cstdio>
using namespace std;
int n,f[255][205];
int main()
{
    
    
	f[0][200]=f[1][200]=1;//初值
	f[2][200]=3;
	for(int i=3;i<=250;i++)//预处理,递推
 	{
    
    
 		int o=0;
 		for(int j=200;j>=1;j--)//高精乘
		{
    
    
			f[i][j]=f[i-2][j]*2+o;
			o=f[i][j]/10;
			f[i][j]%=10;
		}
		o=0;
		for(int j=200;j>=1;j--)//高精加
		{
    
    
			f[i][j]+=f[i-1][j]+o;
			o=f[i][j]/10;
			f[i][j]%=10;
		}
	}
	while(scanf("%d",&n)!=EOF)
	{
    
    
		int j=1;//去0
		while(f[n][j]==0)j++;
		for(int i=j;i<=200;i++)
	 	 printf("%d",f[n][i]);
	 	printf("\n"); 
	}
	return 0;
}

Gracias

Supongo que te gusta

Origin blog.csdn.net/weixin_45524309/article/details/111406854
Recomendado
Clasificación