问题 H: 铺地砖

时间限制: 1.000 Sec 内存限制: 128 M

题目描述

一天,晨晨的数学老师布置了一道题目,大意如下:用1×1和2×2的磁砖不重叠地铺满n×3的地板,共有多少种方案?
例如:n=1时:1×3的地板方法就一个,直接由三个1×1的磁砖铺满。
      n=2时:2×3的地板可以由下面3种方案铺满:

输入

第一行:一个整数n(1≤n≤100)。

输出

输出铺满n×3的地板的方案数。

样例输入

3

样例输出

5

提示

对于20%的数据,1≤n≤15;
对于50%的数据,1≤n≤30;
对于100%的数据,1≤n≤100;

题解:

这个题!!!

找到规律还没有结束!居然当n为100时会超出long long int的表示范围...

所以还要用上“高精度”? 用数组来储存超大数的每一位,并进行运算。

那...我们先来找规律

我想了好一会儿,基本上这种题都需要用到“递推”的思想,那我们来想想看,一个n行3列的地板,不就是在n-1行3列的地板上再加了1行嘛。

我们不妨设想额外加的这一行是由1*1的地砖铺满的,用M[n]表示n行3列地板有多少种铺法。

那么 M[n]=M[n-1]+“未知数x”

没有算出来“x” 是第n行和第n-1行中有2*2地砖的铺法。

我们把2*2地砖看作由4个1*1地砖组合而来

第n行和第n-1行如果要想有2*2的地砖,也即代表着第n-1行和第n行要有4个紧邻的1*1的地砖。

也就代表着.....

第n-1行也必须全是1*1地砖!

通过题目描述我们看到 2行3列有3种铺法,其中有2*2地砖的铺法是2种。

所以这个“x” 是  n-1行3列地板中第n-1行全为1*1地砖时的总铺法 再乘以2。

n-1行3列地板中第n-1行全为1*1地砖时的总铺法  ? 哇,我迷糊了, 而这个实际上可以转化为求 n-2行3列地板的总铺法呀,  因为第n-1行的铺法是固定了的。

答案在这里呼之欲出啦,我们求出来了!

M[n] = M[n-1] + M[n-2]*2

所以,我立马写了这样的一段代码:

#include <cstdio>
typedef long long int ll;
using namespace std;
ll dp[110];
int main(){dp[0]=1;dp[1]=1;dp[2]=3;ll n,i;scanf("%lld",&n);for(i=2;i<=n;i++)dp[i]=dp[i-1]+dp[i-2]*2;printf("%lld",dp[n]);
}

82/100  : (

想要过剩下的测试案例,还需要用上高精度。

所以...我们来看AC代码吧?

#include <cstdio>
typedef long long int ll;
using namespace std;
int dp[110];
void plu(int *a,int *b,int *c){     //用数组实现两个大数相加,结果储存在*c指向的数组int jw=0;while(*a!=-1&&*b!=-1){*c=(*a+*b+jw)%10;jw=(*a+*b+jw)/10;a++;b++;c++;}while(*a!=-1){*c=(*a+jw)%10;jw=(*a+jw)/10;c++;a++;}while(*b!=-1){*c=(*b+jw)%10;jw=(*b+jw)/10;c++;b++;}while(jw){*c=jw%10;jw/=10;c++;}*c=-1;
}
void mul(int *a, int b, int *c){    //实现大数乘以一个较小的数,结果储存在*c指向的数组int jw=0;while(*a!=-1){*c=((*a)*b+jw)%10;jw=((*a)*b+jw)/10;a++;c++;}while(jw){*c=jw%10;c++;jw/=10;}*c=-1;
}
void prt(int *a){                //这是一个逆序输出数组的函数...非必要int cnt=0;for(;*a!=-1;a++)cnt++;a--;while(cnt--){printf("%d",*a);a--;}printf("\n");
}
void mcpy(int *a,int *b){    //这个实现了“a=b”,将一个大数从*b指向的数组中copy到*a指向的数组while(*b!=-1){*a=*b;a++;b++;}*a=-1;
}
int main(){int t0[110]={1,-1},t1[110]={1,-1},t2[110]={3,-1},t3[110];ll n,i;scanf("%lld",&n);if(n>=3){for(i=3;i<=n;i++){mul(t1,2,t0);    //用函数的话,个人感觉程序运行过程简洁直观,而且还容易调试BUG。plu(t2,t0,t3);   //如果把上面那些复制过来,可以想象这里会乱成什么样...mcpy(t1,t2);     //而且我也就不会有这么大的空间来加注释,说些废话了:)mcpy(t2,t3);}                    prt(t3);}elseswitch (n) {case 1:printf("1");break;case 2:printf("3");break;}
}

[2022.1.13]UPC-2021级新生个人训练赛第22场-9783 Problem H 铺地砖相关推荐

  1. [2022.1.13]UPC-2021级新生个人训练赛第22场-9782 Problem G 填字游戏

    问题 G: 填字游戏 时间限制: 1.000 Sec 内存限制: 128 M 题目描述 六一儿童节就要到了,晨晨的学校进行游园活动,其中一个游戏为填字游戏,规则为:有一个R行C列的棋盘(2≤R,C≤2 ...

  2. Contest3117 - 2021级新生个人训练赛第24场_问题 E: 打印方阵

    问题 E: 打印方阵 时间限制: 1.000 Sec 内存限制: 128 MB题目描述 下面这样的方阵很有规律,称为蛇形方阵.例如3*3的: 1 2 3 6 5 4 7 8 9 现在给定边长,输出相应 ...

  3. Contest3121 - 2021级新生个人训练赛第26场_问题 F: 乐乐的数字

    // 问题 F: 乐乐的数字 时间限制: 1.000 Sec 内存限制: 128 MB题目描述 乐乐做完数学作业,突发奇想定义了一种新的数:乐乐数.乐乐把n个数排成一行,一个数的"乐乐数&q ...

  4. [2021.11.19]UPC-2021级新生个人训练赛第4场-19278 Problem D 关门

    题目描述 为了将这些生产的玩具销往海外,晚上江北的玩具公司灯火通明.安安是公司的保安,当所有工作人员离开公司后,他要把公司里所有的门都关闭.房间的门有些是关闭的,有些是打开的.为了察看该公司里所有房间 ...

  5. Contest3145 - 2021级新生个人训练赛第37场_A: 奖品

    // 问题 A: 奖品 时间限制: 1.000 Sec 内存限制: 128 MB题目描述 托塔李天王的三太子那吒,本领高强,他要赶在奥林匹克运动会之际,开一个头脑 奥林匹克比赛,获胜者的奖品就是经过提 ...

  6. 2021级新生个人训练赛第38场

    问题 A: chicken 题目描述 小 x 非常喜欢小鸡翅.他得知 NSC 超市为了吸引顾客,举行了如下的活动: 一旦有顾客在其他超市找到更便宜的小鸡翅,NSC 超市将免费送给顾客 1000g 小鸡 ...

  7. 2021级新生个人训练赛第40场

    问题 A: 多项式输出 题目描述 一元 n 次多项式可用如下的表达式表示: 其中,aixi称为 i 次项,ai 称为 i 次项的系数.给出一个一元多项式各项的次数和系数,请按照如下规定的格式要求输出该 ...

  8. Contest3143 - 2021级新生个人训练赛第36场_B: 数字游戏

    // 问题 B: 数字游戏 时间限制: 1.000 Sec 内存限制: 512 MB题目描述 有一天,小明给佳佳出了一道题, 给出一个正整数n,佳佳可以进行如下三种操作: 1.使n减去1 2.如果n是 ...

  9. Contest3125 - 2021级新生个人训练赛第27场_问题 F: 兔子

    //问题 F: 兔子 时间限制: 1.000 Sec 内存限制: 128 MB题目描述 从左往右有100000001个整数点,分别是整数点0至整数点100000000.有n只兔子,第i只兔子在整数点d ...

最新文章

  1. centos6.5环境DNS-本地DNS主从服务器bind的搭建
  2. java中为什么不能通过getClass().getName()获取父类的类名
  3. idea创建maven项目的路径
  4. Oracle 11g 预定义账户和PLSQL工具、企业管理器的初步使用
  5. 开发基于Web的RSS阅读器
  6. HDFS的副本存放策略(机架感知策略)
  7. Codeforces 845 A. Chess Tourney 思路:简单逻辑题
  8. python特性 property_python特性property
  9. 解决Android 音频Xrun问题
  10. 【转】Sobel 算子
  11. 世界500强面试题(情商部分)
  12. kaptcha 验证码
  13. 中蜂几月份自然分蜂_中蜂一年自然分蜂几次?_库百科养蜂养殖
  14. android是乐视手机刷机,乐视 X620(乐2 全网通)刷机教程,简单刷机
  15. 重大利好,拥有HKICPA证书可申请南沙区人才绿卡
  16. audio应用-外接akm7755
  17. 当年腾讯为什么从QQ转移扶植到微信,如今微信已撑起腾讯半壁江山
  18. 【janus 】openresty +janus
  19. 100个网络基础知识
  20. php版本升级会卡吗,升级php版本到php5.5,掉坑了。。。。

热门文章

  1. 可以分屏的软件_mac必备软件
  2. MySQL之索引,执行计划及SQL优化
  3. Matlab使用文件框选择文件
  4. 查询彩票中奖号码小程序
  5. c++ 转bcd码_BCD码、十六进制与十进制互转
  6. RF SeleniumLibrary 关键字分类解读
  7. Android App实战项目之实现手写签名APP功能(附源码,简单易懂 可直接实用)
  8. linux awk统计文本单词,shell统计文本中单词的出现次数
  9. 达梦数据库disql常用语句(一)
  10. Oracle 中文转为拼音