题目描述

给定\(2*1\)和\(2 * 2\)两种规格的地砖,请问\(2 * n\)的地面总共有多少种方法?

下面是铺满\(2*17\)的地面的示意图。

输入输出格式

输入

多组数据,每组数据包括1行1个整数n,表示地面的长度。\((0\leq n \leq250)\)

输出

每组数据输出\(1\)行\(1\)个整数,表示铺满\(n\)米地面的方法数。

思路

因为我们知道长度为\(i\)的矩阵只能由\(i-1\)和\(i-2\)变来,又长度为一的矩阵的方法数为\(1\),长度为二的矩阵的方法数为\(3\),其中有一种相当于\(i-1\)的方法数,所以状态转移方程为\(dp[i][j]=dp[i-1][j]+dp[i-2][j]*2;\)

代码

#include<bits/stdc++.h>
using namespace std;
int dp[301][501]; //dp[i]用来存储第i列的结果,dp[i][0]存储长度
int main(){
dp[1][0]=1;
dp[1][1]=1;
dp[2][0]=1;
dp[2][1] = 3;
for(int i=3;i<=300;i++){
int len=max(dp[i-2][0],dp[i-1][0]);
for(int j=1;j<=len;j++)
dp[i][j]=dp[i-1][j]+dp[i-2][j]*2; //按位加
dp[i][0]=max(dp[i-2][0],dp[i-1][0]); //取两个加数中较长的长度
for(int j=1;j<=dp[i][0];j++){
dp[i][j+1]+=dp[i][j]/10; //进位
dp[i][j]%=10;
}
while(dp[i][dp[i][0]+1]>0){ //更新高精度加法结果的位数
dp[i][0]++;
dp[i][dp[i][0]+1]+=dp[i][dp[i][0]]/10;
}
}
int n;
while(cin>>n){
if(n==0)
cout<<1<<endl;
else{
for(int i=dp[n][0];i>=1;i--)
cout<<dp[n][i];
cout<<endl;
}
}
return 0;
}

最新文章

  1. RedisUtil 工具类
  2. 2.MongoDB 基于node.js访问和操作集合
  3. (八) 一起学 Unix 环境高级编程 (APUE) 之 信号
  4. php学习笔记:读取文档的内容,利用php修改文档内容
  5. JAVA程序1,1,2,3,5,8,13,21....第30个是什么...?
  6. 一行代码设置TForm颜色的前世今生(属性赋值引起函数调用,然后发消息实现改变显示效果),TForm的初始颜色在dfm中设置了clBtnFace色
  7. struts2运行机制
  8. ubuntu13.10 登陆后黑屏,没有菜单栏,可以启动termina,怎么解决?
  9. [Cacti] cacti监控mongodb性能实战
  10. Tensorflow学习笔记(对MNIST经典例程的)的代码注释与理解
  11. (NO.00001)iOS游戏SpeedBoy Lite成形记(十八)
  12. kafka-connect-hdfs连接hadoop hdfs时候,竟然是单点的,太可怕了。。。果断改成HA
  13. 【原创】大叔经验分享(39)spark cache unpersist级联操作
  14. Sublime Text3配置Lua运行环境
  15. Qt中关于QMouseEventbuttons()和QMouseEventbutton()的使用注意
  16. Dojo框架:误解与现实[转载]
  17. Hadoop的简单使用
  18. vi使用技巧(转载)
  19. 18-THREE.JS 基本材质
  20. 配置LANMP环境(3)-- 安装anmp前准备与实用软件安装

热门文章

  1. idea 自动生成try/catch代码块的快捷键
  2. 占个坑 未来学qt的时候专用
  3. js 从目标数组中过滤掉 一个数组元素,
  4. JavaScript运算符与流程控制
  5. 自动化不知如何参数化(二)?xlrd来帮你解决
  6. layui常用插件(二) 时间插件
  7. python学习笔记1 -- 函数式编程之高阶函数 使用函数作为返回值
  8. matplotlib颜色线条及绘制直线
  9. 线程_使用multiprocessing启动一个子进程及创建Process 的子类
  10. PHP NULL 合并运算符