Schéma de carrelage
Description du titre
Idées de résolution de problèmes
Soit f (i) le nombre de schémas de la matrice 2 * i
Mettez un 2 * 1 verticalement sur la i-ème colonne, le nombre de plans est f (i-1),
la i-ème colonne et la i-1ème colonne, mettez un 2 * 2, le nombre de plans est f ( i-2)
la i-ème colonne Placez un 1 * 2 horizontalement avec la i-1ème colonne et le nombre de plans est f (i-2)
La formule tardive
f [i] = f [i - 2] ∗ 2 + f [i - 1] f [i] = f [i-2] * 2 + f [i-1]f [ i ]=f [ i-2 ]∗2+f [ i-1 ]
Valeur initiale: f [0] = f [1] = 1 f [2] = 3
Parce que le n maximum de cette question est de 250 , elle explosera longtemps,
donc haute précision
Code 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;
}