9273:PKU2506Tiling
9273:PKU2506Tiling
来源:http://noi.openjudge.cn/ch0202/9273/
总时间限制:2000ms 单个测试点时间限制:1000ms
内存限制:131072kB
描述
对于一个2行N列的走道。现在用1*2,2*2的砖去铺满。问有多少种不同的方式。
下图是一个2行17列的走道的某种铺法。
输入
整个测试有多组数据,请做到文件底结束。每行给出一个数字N,0 <= n <= 250
输出
如题
样例输入
2
8
12
100
200
样例输出
3
171
2731
845100400152152934331135470251
1071292029505993517027974728227441735014801995855195223534251
分析:
f[n] = f[n-1] + f[n-2]*2 ;
使用这个递推公式,再加上高精度计算即可。
综合了高精度、递推,而且高精度的运用比较熟悉、巧妙。
代码来源:http://blog.csdn.net/c20180630/article/details/52329721
1 #include<iostream> 2 #include<cstdio> 3 using namespace std; 4 int a[301][501]; //a[i]用来存储一个大整数,其中a[i][0]存储长度,真实数据倒序存储。 5 int max(int x,int y){return x>y?x:y;} 6 int main() 7 { 8 a[1][0]=1; 9 a[1][1]=1; 10 a[2][0]=1; 11 a[2][1]=3; 12 for(int i=3;i<=300;i++){ 13 for(int j=1;j<=max(a[i-2][0],a[i-1][0]);j++) 14 a[i][j]=a[i-1][j]+a[i-2][j]*2; //高精度加法(按位加的操作) 15 a[i][0]=max(a[i-2][0],a[i-1][0]); 16 for(int j=1;j<=a[i][0];j++){ //高精度加法的进位 17 a[i][j+1]+=a[i][j]/10; 18 a[i][j]%=10; 19 } 20 while(a[i][a[i][0]+1]){ //更新高精度加法结果的位数 21 a[i][0]++; 22 a[i][a[i][0]+1]+=a[i][a[i][0]]/10; 23 } 24 } 25 int n; 26 while(cin>>n){ 27 if(n==0) 28 cout<<1<<endl; 29 else{ 30 for(int i=a[n][0];i>=1;i--) 31 cout<<a[n][i]; 32 cout<<endl; 33 } 34 } 35 }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
· 【译】Visual Studio 中新的强大生产力特性
· 2025年我用 Compose 写了一个 Todo App
2014-03-11 坐在马桶上看算法:快速排序【转】
2014-03-11 集合的划分【转】
2014-03-11 递归练习:逆波兰表达式求解