蓝桥杯2022年第十三届省赛真题-积木画

举报
xcc-2022 发表于 2022/06/09 16:39:12 2022/06/09
【摘要】 题目 2660: 蓝桥杯2022年第十三届省赛真题-积木画时间限制: 1Sec 内存限制: 256MB 提交: 623 解决: 135题目描述小明最近迷上了积木画,有这么两种类型的积木,分别为 I 型(大小为 2 个单位面积)和 L 型(大小为 3 个单位面积):同时,小明有一块面积大小为 2 × N 的画布,画布由 2 × N 个 1 × 1 区域构成。小明需要用以上两种积木将画布拼满,他...

题目 2660:

蓝桥杯2022年第十三届省赛真题-积木画

时间限制: 1Sec 内存限制: 256MB 提交: 623 解决: 135

题目描述

小明最近迷上了积木画,有这么两种类型的积木,分别为 I 型(大小为 2 个单位面积)和 L 型(大小为 3 个单位面积):

蓝桥杯2022年第十三届省赛真题积木画1

同时,小明有一块面积大小为 2 × N 的画布,画布由 2 × N 个 1 × 1 区域构成。小明需要用以上两种积木将画布拼满,他想知道总共有多少种不同的方式? 积木可以任意旋转,且画布的方向固定。

输入

输入一个整数 N,表示画布大小。

输出

输出一个整数表示答案。由于答案可能很大,所以输出其对 1000000007 取模后的值。

样例输入复制

3

样例输出复制

5

提示

五种情况如下图所示,颜色只是为了标识不同的积木:

蓝桥杯2022年第十三届省赛真题积木画2

对于所有测试用例,1 ≤ N ≤ 10000000.

解题思路:
哎,但凡是比赛的时候再测一个数据也不会不过,太可惜了,但是写的时候思路是对的,可惜a[2][1]写错了。

思路:a[i][0]:i列积木的堆法,a[i][1]:i列多一块小方格的堆法。

如:

img
或者
img
不管这三块是怎么放的,都叫a[3][0].
如果在此基础上右边多一个小方格就叫a[3][1],注意小方格可以在第四列上一行也可以在第四列下一行(不好找图就不给了,自行想象)

给出动态规划方程:

 a[i][0]=(a[i-2][0]+a[i-2][1]+a[i-1][0])%mod; 
a[i][1]=(a[i-1][0]*2+a[i-1][1])%mod;

画布大小为i的排法,既a[i][0]的值:

  1. 先考虑少一块I型积木的排法,既a[i-1][0],这时加上一块I型积木就行了,
  2. 再考虑少一块L型积木的排法,既a[i-2][1],这时加上一块L型积木就行了,
  3. 考虑少两块I型积木的排法,既a[i-2][0],加上两块I型积木,注意,两块必需横着加进去,如果是竖着加,就相当于第一种类型排法了,重复了。
  4. 涉及缺更多积木时,会发现无论怎么排,排法都会和上述情况重复,也就是说,以上三种情况涵盖了a[i][0]的所有排法。

所以有:

a[i][0]=(a[i-2][0]+a[i-2][1]+a[i-1][0])%mod;

a[i][1]的排法,大家可以自行画图写出来。

写出初始状态:

a[1][0]=1,a[2][0]=2,a[1][1]=2,a[2][1]=4;

给出完整代码:

#include<stdio.h>
#define mod 1000000007
long int a[10000001][2];
int main()
{
     int n;
    a[1][0]=1,a[2][0]=2,a[1][1]=2,a[2][1]=4;
    scanf("%d",&n);
    if(n==1)printf("1");
    else if(n==2)printf("2");
    else {
        for(int i=3;i<=n;i++){
            a[i][0]=(a[i-2][0]+a[i-2][1]+a[i-1][0])%mod;
            a[i][1]=(a[i-1][0]*2+a[i-1][1])%mod;
        }
        printf("%ld",a[n][0]%mod);
    }
    return 0;
}

如果有哪里看不懂,可以评论区或者私信我,
如果觉得对你有用,就给本蒟蒻一个好评吧。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。