Problem L ID:1012
简单题意:向一个2*n的长方形方格里铺1*2的骨牌,方格须铺满。给出n,求铺放方案总数。
解题思路形成过程:用一个数组a来储存不同n值的总方式数,由题意可得:a[1]=1;a[2]=2;
当n>=3时,状态转移方程为:a[i]=a[i-1]+a[i-2];
进行预处理,由于n最大为40,将1-50的所有结果均存到数组里。
对应不同的n值,直接输出对应的数组元素值。
感想:数组的数据类型须使用__int64,包括long long在内的其他类型在n=50时都会超出范围。注意__int64类型的定义与输出。
代码:#include <iostream>
#include <stdio.h>
#include <string.h>
using namespace std;
__int64 a[51]; //long long 也不行
void dp()
{
a[1]=1;a[2]=2;
for(int i=3;i<=50;++i)
a[i]=a[i-1]+a[i-2];
}
int main()
{
//freopen("1.txt","r",stdin);
int n;
dp();
while(scanf("%d",&n)!=EOF)
{
printf("%I64d\n",a[n]); //注意输出方式!
}
return 0;
}
#include <iostream>
#include <stdio.h>
#include <string.h>
using namespace std;
__int64 a[51]; //long long 也不行
void dp()
{
a[1]=1;a[2]=2;
for(int i=3;i<=50;++i)
a[i]=a[i-1]+a[i-2];
}
int main()
{
//freopen("1.txt","r",stdin);
int n;
dp();
while(scanf("%d",&n)!=EOF)
{
printf("%I64d\n",a[n]); //注意输出方式!
}
return 0;
}