9273:PKU2506Tiling
C++参考代码一:
/*
2.3基本算法之递归变递推_9273:PKU2506Tiling
http://noi.openjudge.cn/ch0203/9273/
*/
#include<iostream>
#include<cstdio>
using namespace std;
int a[251][200],b,n,k=199;
int main()
{
/*第一个下标储存第N个数,即地砖列数,第二个下标储存该数的某一位。*/
a[0][0]=1;
a[1][0]=1;
a[2][0]=3;
//For循环求出当地砖列数为3-250时的值。
for(int i=3;i<=250;i++)
for(int j=0;j<=199;j++) //每个高精度数组设为200位。
{
a[i][j]=a[i-1][j]+a[i-2][j]+a[i-2][j]+b;
/*高精加,递推式为a[i][j]=a[i-1][j]+a[i-2][j]*2,初始情况分别为
两块1*2横放(剩下n-2列),一块2*2(剩下n-2列),一块1*2竖放(剩
下n-1列)*/
b=a[i][j]/10;
a[i][j]%=10;
}
//也可用while(cin>>n)
while(scanf("%d",&n)!=EOF)
{
//每循环一次进行一次初始化。
k=199;
//消去前导0。
while(a[n][k]==0)
{
k--;
}
for(int i=k;i>=0;i--)
cout<<a[n][i];
cout<<endl;
}
return 0;
}
C++参考代码二:
/*
2.3基本算法之递归变递推_9273:PKU2506Tiling02
http://noi.openjudge.cn/ch0203/9273/
*/
#include<cstdio>
#include<cstdlib>
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
int a[501][501],i,j;
a[1][0]=1;
a[1][1]=1;
a[2][0]=1;
a[2][1]=3;
for(i=3;i<=300;i++)
{
for(j=1;j<=max(a[i-2][0],a[i-1][0]);j++)
a[i][j]=a[i-1][j]+a[i-2][j]*2;
a[i][0]=max(a[i-2][0],a[i-1][0]);
for(j=1;j<=a[i][0];j++)
{
a[i][j+1]+=a[i][j]/10;
a[i][j]%=10;
}
while(a[i][a[i][0]+1])
{
a[i][0]++;
a[i][a[i][0]+1]+=a[i][a[i][0]]/10;
}
}
int n;
while(cin>>n)
{
if(n==0)
cout<<1<<endl;
else
{
for(int i=a[n][0];i>=1;i--)
cout<<a[n][i];
cout<<endl;
}
}
return 0;
}
C++参考代码三:
/*
2.3基本算法之递归变递推_9273:PKU2506Tiling03
http://noi.openjudge.cn/ch0203/9273/
*/
#include <algorithm>
#include <string.h>
#include <iostream>
#include <stdio.h>
#include <string>
#include <vector>
#include <queue>
#include <map>
#include <set>
using namespace std;
typedef long long LL;
const int N = 2010;
int a[300][300];
int main()
{
memset(a,0,sizeof(a));
a[0][0]=1, a[1][0]=1,a[2][0]=3;
int n;
while(scanf("%d", &n)!=EOF)
{
if(n==2) cout<<3<<endl;
else
{
int digit=1;
for(int i=3; i<=n; i++)
{
int sum=0;
for(int j=0; j<digit; j++)
{
a[i][j]=(sum+a[i-1][j]+2*a[i-2][j])%10000;
sum=(sum+a[i-1][j]+2*a[i-2][j])/10000;
}
if(sum!=0)
{
a[i][digit++]=sum;
}
}
cout<<a[n][digit-1];
for(int i=digit-2; i>=0; i--) printf("%04d",a[n][i]);
cout<<endl;
}
}
return 0;
}
NOI / 2.2基本算法之递归和自调用函数&&递归变递推
NOI / 2.3基本算法之递归变递推——题目 排名 状态 提问 9273:PKU2506Tiling
NOI / 2.3基本算法之递归变递推——题目 排名 状态 提问 9273:PKU2506Tiling_普青落的博客-CSDN博客
PKU2506Tiling
POJ 9273:PKU2506Tiling(dp高精度)
9273:PKU2506Tiling(2种解法递归和递推)
电子学会青少年编程等级考试
中国电子学会考评中心
软件编程(C语言)
电子学会 青少年软件编程等级考试 C语言 3 级