第十三届蓝桥杯 C++ B 组省赛 G 题———积木画(AC)

news2025/7/11 9:36:27

目录

  • 1.积木画
    • 1.题目描述
    • 2.输入格式
    • 3.输出格式
    • 4.样例输入
    • 5.样例输出
    • 6.样例说明
    • 7.数据范围
    • 8.原题链接
  • 2.解题思路
  • AC_code

1.积木画

1.题目描述

小明最近迷上了积木画, 有这么两种类型的积木, 分别为 I I I 型(大小为 2 个单位面积) 和 L L L 型 (大小为 3 个单位面积):
在这里插入图片描述
同时, 小明有一块面积大小为 2 × N 2 \times N 2×N 的画布, 画布由 2 × N 2 \times N 2×N 1 × 1 1 \times 1 1×1 区域构 成。小明需要用以上两种积木将画布拼满, 他想知道总共有多少种不同的方式? 积木可以任意旋转, 且画布的方向固定。

2.输入格式

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

3.输出格式

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

4.样例输入

3

5.样例输出

5

6.样例说明

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

在这里插入图片描述

7.数据范围

1 ≤ N ≤ 1 0 7 1≤N≤10^7 1N107

8.原题链接

积木画

2.解题思路

比较简单的状态压缩 d p dp dp 的模型,虽然 N N N 很大,但总共只有两行,所以只需要考虑结尾的插入情况即可。
定义 f [ i ] [ j ] f[i][j] f[i][j]已经排好了前 i − 1 i-1 i1 列,且第 i i i 列的状态为 j j j 的方案数。当 j j j0 时表示第 i i i 列上面和下面均未摆放积。为 1 时表示上面未摆,下面摆放了积木。当为 2 时表示上面摆了,下面未摆的情况,当为 3 时表示上下均摆好了积木的情况。
从定义可知最终答案为 f [ n ] [ 3 ] f[n][3] f[n][3]

考虑如何进行初始化,当 n n n0时,可以视为完全摆好的情况,则 f [ 0 ] [ 3 ] = 1 f[0][3]=1 f[0][3]=1,当 n n n1 时,只有一种摆法,则 f [ 1 ] [ 3 ] = 1 f[1][3]=1 f[1][3]=1

接下来考虑如何进行状态转移:
首先考虑 f [ i ] [ 0 ] f[i][0] f[i][0] ,因为0表示上下都未摆放积木,而状态定义就要求了前 i − 1 i-1 i1列已经摆好,则转移方程:
f [ i ] [ 0 ] = f [ i − 1 ] [ 3 ] f[i][0]=f[i-1][3] f[i][0]=f[i1][3]
在这里插入图片描述

然后考虑 f [ i − 1 ] [ 1 ] f[i-1][1] f[i1][1]如何转移:

1表示我们第 i i i 列是下面摆放了上面未摆放,也就是下面突出了一格,我们考虑如何才会产生这样的效果:

当这样摆放时可以得到,但转移时不应该从 i − 1 i-1 i1 列转移,而应该是从 f [ i − 2 ] [ 3 ] f[i-2][3] f[i2][3] 转移。
在这里插入图片描述
除此之外我们还可以像下面这样插入,这样我们可以从 f [ i − 1 ] [ 2 ] f[i-1][2] f[i1][2]转移过来。
在这里插入图片描述
综上我们有两种情况可以得到 f [ i ] [ 1 ] f[i][1] f[i][1],转移方程为:
f [ i ] [ 1 ] = ( f [ i − 1 ] [ 0 ] + f [ i − 1 ] [ 2 ] ) f[i][1] = (f[i - 1][0] + f[i - 1][2]) f[i][1]=(f[i1][0]+f[i1][2])

分析 f [ i ] [ 2 ] f[i][2] f[i][2]其实和 f [ i ] [ 1 ] f[i][1] f[i][1]同理,反过来就行,有如下两种插入情况:
在这里插入图片描述
在这里插入图片描述
那么转移方程则为:
f [ i ] [ 2 ] = ( f [ i − 1 ] [ 0 ] + f [ i − 1 ] [ 1 ] ) f[i][2] = (f[i - 1][0] + f[i - 1][1]) f[i][2]=(f[i1][0]+f[i1][1])

最后考虑 f [ i ] [ 3 ] f[i][3] f[i][3]如何转移,这个转移的情况比较多,直接上图大家就能看懂了:
在这里插入图片描述
横着插两块,从 f [ i − 2 ] [ 3 ] f[i-2][3] f[i2][3]转移
在这里插入图片描述
可以从 f [ i − 1 ] [ 3 ] f[i-1][3] f[i1][3]转移
在这里插入图片描述
在这里插入图片描述
可以从 f [ i − 1 ] [ 1 ] f[i-1][1] f[i1][1] f [ i − 1 ] [ 2 ] f[i-1][2] f[i1][2]转移,综上:
f [ i ] [ 3 ] = ( f [ i − 2 ] [ 3 ] + f [ i − 1 ] [ 3 ] + f [ i − 1 ] [ 2 ] + f [ i − 1 ] [ 1 ] ) f[i][3] = (f[i - 2][3] + f[i - 1][3] + f[i - 1][2] + f[i - 1][1]) f[i][3]=(f[i2][3]+f[i1][3]+f[i1][2]+f[i1][1])

AC_code

#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
typedef unsigned long long uLL;
typedef pair<int, int> PII;
#define pb(s) push_back(s);
#define SZ(s) ((int)s.size());
#define ms(s,x) memset(s, x, sizeof(s))
#define all(s) s.begin(),s.end()
const int inf = 0x3f3f3f3f;
const int mod = 1000000007;
const int N = 10000010;

int n;
// f[i][j]表示已经操作完前i-1列,且第i列的状态为j的方案数
LL f[N][3];
void solve()
{
	cin >> n;
	f[0][3] = 1;
	f[1][3] = 1;
	for (int i = 2; i <= n; ++i) {
		f[i][0] = f[i - 1][3];
		f[i][1] = (f[i - 1][0] + f[i - 1][2]) % mod;
		f[i][2] = (f[i - 1][0] + f[i - 1][1]) % mod;
		f[i][3] = (f[i - 2][3] + f[i - 1][3] + f[i - 1][2] + f[i - 1][1]) % mod;
	}
	cout << f[n][3] << '\n';
}
int main()
{
	ios_base :: sync_with_stdio(false);
	cin.tie(nullptr);
	int t = 1;
	while (t--)
	{
		solve();
	}
	return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/36814.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

java面试强基(12)

什么是泛型&#xff1f;有什么作用&#xff1f; Java 泛型&#xff08;Generics&#xff09; 是 JDK 5 中引入的一个新特性。使用泛型参数&#xff0c;可以增强代码的可读性以及稳定性。 编译器可以对泛型参数进行检测&#xff0c;并且通过泛型参数可以指定传入的对象类型。…

多媒体技术论文研读报告

多媒体技术论文研读报告 一、论文基本信息 论文题目为&#xff1a;基于多模态特征融合嵌入的相似广告检索方法&#xff0c;作者信息&#xff1a;南京大学计算机软件新技术国家重点实验室&#xff0c;南京大学软件学院冯奕、周晓松、李传艺、葛季栋、骆斌&#xff0c;深圳市腾…

2022最新JUC+多线程面试题

Java中实现多线程有几种方法 创建线程的常用的几种方式&#xff1a; 继承Thread类 实现Runnable接口 &#xff08;重写run方法&#xff0c;无返回值&#xff09; 实现Callable接口&#xff08; JDK1.5>,重写call方法&#xff0c;可以自定义返回值 &#xff09; 线程池方…

带式输送机的传动装置设计

目 录 摘 要 I Abstract II 1 绪论 1 1.1设计概述 1 1.2研究内容及参数 1 1.3 带传动 2 1.4圆锥-圆柱齿轮传动减速器 2 2结构设计 4 2.1V带传动 4 2.2减速器内部的传动零件 4 2.3联轴器的选择 4 3 设计计算过程及说明 6 3.1选择电动机 6 3.1.1电动机类型和结构型式选择 6 3.1.2…

android源码-ContentProvider实现原理分析

前言&#xff1a; 最初的目的是想研究下ContentProvider产生ANR原因的&#xff0c;但是如果要讲ANR的原因&#xff0c;那么必须要了解ContentProvider的完整实现原理&#xff0c;所以本篇就先讲一下ContentProvider的实现原理&#xff0c;下一篇再去讲ANR的原因。 本篇主要会讲…

估值破千亿,被资本疯抢的广汽埃安会是广汽的未来吗?

最近&#xff0c;广汽埃安在新能源市场上捷报频传&#xff0c;先是宣布完成了182.94亿元的A轮融资&#xff0c;成近年国内新能源整车最大的单笔私募融资。品牌估值更是达到了震撼人心的1032.39亿&#xff0c;基本等于广汽集团AH总市值&#xff0c;也远超港股小鹏、零跑汽车的市…

就两秒?这说出去谁信啊!

文 | xiaoyi&#xff08;转载请后台联系&#xff09;关注公众号&#xff1a;小一的学习笔记截止发文&#xff0c;北上广深一共有6510条公交线路为了获取上面的这些线路信息&#xff0c;我写了一个爬虫&#xff0c;大概用了2秒左右就搞定&#xff0c;真爽&#xff01;说出来你们…

Maven环境搭建

目录一、安装及环境配置1.1、下载1.2、Maven目录结构介绍1.3、环境配置二、关于Maven仓库的说明2.1、仓库基本分类&#xff08;私服仓库和中央仓库均为远程仓库&#xff09;2.2、本地仓库的默认位置&#xff08;在setting.xml中配置&#xff09;2.3、中央仓库连接位置的体现&am…

K8S部署后的使用:dashboard启动、使用+docker镜像拉取、容器部署(ubuntu环境+gpu3080+3主机+部署深度学习模型)

0、k8s安装、docker安装 参考&#xff1a;前两步Ubuntu云原生环境安装&#xff0c;dockerk8skubeedge&#xff08;亲测好用&#xff09;_爱吃关东煮的博客-CSDN博客_ubantu部署kubeedge 配置节点gpu&#xff1a; K8S调用GPU资源配置指南_思影影思的博客-CSDN博客_k8s 使用gpu…

机器学习-(手推)线性回归1-最小二乘法(矩阵表达)、几何意义

一、最小二乘法&#xff08;矩阵表达&#xff09;误差平均分散每个样本 如下数学推到过程&#xff08;手推&#xff01;&#xff01;&#xff01;&#xff09;&#xff1a; 数据介绍&#xff1a; D{(x1,y1),(x2,y2),......(xn,yn)&#xff0c; Xi&#xff08;P维列向量&…

留学Essay写作主要靠哪些步骤得分?

期末来了&#xff0c;留学生该怎么办&#xff1f;如何做Essay?下面我们介绍提高写作能力的有效技巧&#xff01; What should international students do when the end of the semester comes?How to do Essay?Here we introduce effective skills to improve your writing …

[附源码]SSM计算机毕业设计农贸产品交易系统JAVA

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

SSM框架-从JDBC到Mybatis,你今天CRUD了吗?

1 Jdbc 1.1 jdbc入门使用 导入驱动jar包 新建一个目录lib&#xff0c;把jar包放进去 add as library 具体代码 public class JDBCdEMO {public static void main(String[] args) throws Exception{//1.注册驱动Class.forName("com.mysql.jdbc.Driver");//2.获取连…

vue2 - 基于Export2Excel.js导出Excel案例(js-xlsx插件二次封装使用)

目录一、项目场景二、实现思路三、准备工作1、下载js-xlsx2、下载Export2Excel.js3、下载file-saver和script-loader4、下载mock四、代码实现1、mock数据2、使用Export2Excel.js导入导出excel数据3、App.vue代码五、运行结果六、进阶&#xff08;复杂表头的导出&#xff09;一、…

让我们拥抱DataV,感受数据可视化的魅力

最近领导给安排了一个工作&#xff0c;做原型设计。看了37万字的项目需求文档&#xff0c;发现客户对数据可视化要求很高。为什么用户对可视化要求这高呢&#xff1f;可以说&#xff0c;可视化也是这两年的热点了&#xff0c;大数据&#xff0c;可视化&#xff0c;数字孪生频繁…

[HFCTF2020]EasyLogin

有注册登录&#xff0c;先注册一个账号然后登录进去 在登录页面的源代码发现 访问得到 /*** 或许该用 koa-static 来处理静态文件* 路径该怎么配置&#xff1f;不管了先填个根目录XD*/function login() {const username $("#username").val();const password $(…

树形表,自关联表查询技巧

方法一&#xff1a;部门表&#xff0c;部门表中除了自身主键id外&#xff0c;还有另一个字段parentId父id&#xff0c;可以一直递归下去 数据库表&#xff1a; 菜单这样展示就需要我们在接口的返回值中&#xff0c;返回这样的层级数据&#xff1a; [{"id": 1,"…

Mybatis-plus使用教程

注意点&#xff1a;我们在主启动类上需要扫描我们持久层文件下的所以接口 MapperScan("com.kuang.mapper") 配置日志 mybatis-plus.configuration.log-implorg.apache.ibatis.logging.stdout.StdOutImplCRUD扩展 1.插入测试 //测试插入Testpublic void testInse…

java之《浅入了解异常》适合预习,复习

&#x1f387;&#x1f387;&#x1f387;作者&#xff1a; 小鱼不会骑车 &#x1f386;&#x1f386;&#x1f386;专栏&#xff1a; 《java练级之旅》 &#x1f393;&#x1f393;&#x1f393;个人简介&#xff1a; 一名专科大一在读的小比特&#xff0c;努力学习编程是我…

就推荐 4 个 yyds 的开源项目

本期推荐开源项目目录&#xff1a;1. 2022 年黑色星期五精选项目2. 力推的 SwiftUI 教程3. 开源的高校微信小程序4. 上班摸鱼用的 IDEA 插件012022 年黑色星期五精选项目没错&#xff0c;这个开源项目叫做 Black Friday。这是一个优质开源项目精选开源项目&#xff0c;盘点了开…