当前位置: 首页 > article >正文

[蓝桥杯]格子刷油漆

格子刷油漆

题目描述

X 国的一段古城墙的顶端可以看成 2×N2×N 个格子组成的矩形(如下图所示),现需要把这些格子刷上保护漆。

你可以从任意一个格子刷起,刷完一格,可以移动到和它相邻的格子(对角相邻也算数),但不能移动到较远的格子(因为油漆未干不能踩!)

比如:a d b c e f 就是合格的刷漆顺序。c e f d a b 是另一种合适的方案。

当已知 NN 时,求总的方案数。当 NN 较大时,结果会迅速增大,请把结果对 109+7109+7 取模。

输入描述

输入数据为一个正整数(不大于 1000)。

输出描述

输出数据为一个正整数。

输入输出样例

示例

输入

2

输出

24

运行限制

  • 最大运行时间:1s
  • 最大运行内存: 256M

总通过次数: 448  |  总提交次数: 645  |  通过率: 69.5%

难度: 中等   标签: 2013, 国赛, 动态规划

格子刷油漆问题:动态规划解法

问题分析

在 2×N 的网格上刷油漆,规则如下:

  • 从任意格子开始,每次移动到相邻格子(包括对角相邻)
  • 不能跳过未刷的格子
  • 最终方案数需对 109+7 取模

这是一个典型的动态规划问题,需要定义两个核心数组:

  • ​a[i]​​:从左上角出发,刷完 2×i 网格后停在任意位置的方案数
  • ​b[i]​​:从左上角出发,刷完 2×i 网格后回到同列下方格子的方案数
动态规划递推公式
  1. ​初始化边界条件​​:

    • b[1]=1(单列网格只有 1 种回路方案)
    • a[1]=1(单列网格只有 1 种遍历方案)
    • a[2]=6(2×2 网格有 6 种遍历方案)
  2. ​状态转移方程​​:

    • ​回路方案​​:b[i]=2×b[i−1]mod109+7
      (每增加一列,回路方案翻倍)
    • ​遍历方案​​:a[i]=(2×a[i−1]+b[i]+4×a[i−2])mod109+7
      (含三种情况:向下刷、向右刷、折返刷)
  3. ​总方案计算​​:

    • ​四个角出发​​:4×a[n]
    • ​中间列出发​​(第 2 至 n−1 列):
    • (每个中间列有 2 个起点,左右双向遍历各需回路和自由路径组合)
      #include <iostream>
      #include <vector>
      using namespace std;const int MOD = 1000000007;
      const int MAX_N = 1000;int main() {int n;cin >> n;// 特殊处理 n=1if (n == 1) {cout << 2 << endl;  // 两个起点各1种方案return 0;}vector<long long> a(MAX_N + 1, 0);vector<long long> b(MAX_N + 1, 0);// 初始化基础状态b[1] = 1;for (int i = 2; i <= n; i++) {b[i] = (2 * b[i - 1]) % MOD;  // 回路方案递推}a[1] = 1;a[2] = 6;for (int i = 3; i <= n; i++) {// 三种情况:向下刷、向右刷、折返刷a[i] = (2 * a[i - 1] + b[i] + 4 * a[i - 2]) % MOD;}// 计算总方案:四个角 + 中间列long long total = 4 * a[n] % MOD;for (int i = 2; i < n; i++) {long long term1 = (8 * b[i - 1] % MOD) * a[n - i] % MOD;long long term2 = (8 * b[n - i] % MOD) * a[i - 1] % MOD;total = (total + term1 + term2) % MOD;}cout << total << endl;return 0;
      }
      关键测试点验证
      输入 N输出说明
      12两个起点各1种方案
      2244个角方案 + 中间方案
      396递推组合验证
      22359635897大数取模验证
      复杂度分析
    • ​时间复杂度​​:O(N),单次遍历递推
    • ​空间复杂度​​:O(N),存储状态数组
    • ​适用场景​​:N≤1000,满足题目约束(1秒时限)

相关文章:

[蓝桥杯]格子刷油漆

格子刷油漆 题目描述 X 国的一段古城墙的顶端可以看成 2N2N 个格子组成的矩形&#xff08;如下图所示&#xff09;&#xff0c;现需要把这些格子刷上保护漆。 你可以从任意一个格子刷起&#xff0c;刷完一格&#xff0c;可以移动到和它相邻的格子&#xff08;对角相邻也算数&…...

Monorepo架构: 项目管理工具介绍、需求分析与技术选型

概述 如何实现 monorepo&#xff0c;以及在项目中如何管理多个包&#xff0c;在进行具体项目开发前&#xff0c;有必要强调一个重要思维 — 全局观 即看待技术方案时&#xff0c;要从需求角度出发&#xff0c;综合考量该方案能否长远满足项目或团队需求 为什么要有全局观呢&a…...

ubuntu下libguestfs-tools

在ubuntu下&#xff0c;使用libguestfs-tools工具挂载其他磁盘和分区。 首先安装libguestfs-tools将vmx虚拟磁盘共享&#xff1a;sudo vmhgfs-fuse .host:/ /mnt/hgfs -o allow_other执行如下命令查看分区名称&#xff1a;virt-filesystems -a /mnt/hgfs/D/vmware/FGT_VM64-v7…...

Authentication failed(切换了新的远程仓库tld)

启用 Git Credential Manager git config --global credential.helper manager 强制弹出凭据输入窗口 git config --global credential.helper.modalprompt true 指定 TFS 服务器使用基础认证&#xff08;Basic Auth&#xff09; git config --global credential.https://…...

【Web应用】若依框架:基础篇14 源码阅读-后端代码分析-课程管理模块前后端代码分析

文章目录 一、课程管理模块前端代码截图二、前端代码及分析index.vuecourse.js 三、前端执行流程1. 组件初始化2. 查询操作3. 列表操作4. 对话框操作5. API 请求6. 执行流程总结关键点 四、课程管理模块后端代码截图五、后端代码块CourseControllerICourseServiceCourseMapperC…...

在 Linux 上安装 `pgvector`(这是一个 PostgreSQL 的向量类型扩展,常用于处理嵌入向量,便于进行向量相似度搜索)

1. 安装 PostgreSQL 确保你已经安装好 PostgreSQL 数据库。 例如在 Ubuntu 上&#xff1a; sudo apt update sudo apt install postgresql postgresql-contrib2. 安装依赖 pgvector 扩展用的是 make、gcc 等开发工具&#xff0c;因此你需要先安装 PostgreSQL 的开发包和编译…...

09.MySQL内外连接

09.MySQL内外连接 文章目录 MySQL内外连接 内连接 外连接 左外连接 右外连接 简单案例 MySQL内外连接 在数据库操作中&#xff0c;表的连接是一个非常重要的概念。简单来说&#xff0c;连接就是将两个或多个表中的数据按照某种规则结合起来&#xff0c;从而获取我们所需要的…...

Python爬虫实战:研究Scrapy-Splash库相关技术

1 引言 1.1 研究背景与意义 网络爬虫作为一种自动获取互联网信息的技术,在数据挖掘、信息检索、舆情分析等领域有着广泛的应用。然而,随着 Web 技术的不断发展,越来越多的网站采用 JavaScript 动态渲染技术,如 React、Vue 等框架构建的单页应用 (SPA)。这些网站的内容通常…...

智能升级:中国新能源汽车充电桩规模化建设与充电桩智慧管理方案

近年来&#xff0c;中国新能源汽车产业快速发展&#xff0c;市场规模持续扩大&#xff0c;但充电基础设施的建设与管理仍面临布局不均、利用率低、智能化水平不足等问题。为推动新能源汽车普及&#xff0c;国家正加速充电桩的规模化建设&#xff0c;并通过智慧化管理提升运营效…...

AlphaFold3服务器安装与使用(非docker)(1)

1. 服务器显卡驱动准备 这部分我会详细记录一下我踩过的坑及怎样拯救的&#xff0c;原谅啰嗦啦 ^_^ 1.1 服务器旧配置 1.1.1 nvidia-smi [xxxxxxlocalhost ~]# nvidia-smi Thu May 29 20:54:00 2025 -------------------------------------------------------------…...

接口自动化测试之pytest接口关联框架封装

&#x1f345; 点击文末小卡片&#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 一般情况下&#xff0c;我们是通过一个yaml文件进行关联实现 在根目录下新建一个文件yaml&#xff0c;通过上述conftest.py文件实现全局变量的更新: 1.首先需要建…...

M1安装并使用Matlab2024a进行java相机标定

安装 Matlab下载地址&#xff1a;https://www.macxin.com/archives/23771.html注意⚠️&#xff1a;如若需要java调用Matlab函数&#xff0c;则需要java版本为21 使用 安装完成之后运行此节目可以看到&#xff1a; 构建jar 命令行输入deploytool&#xff0c;会有一个弹窗&a…...

02-Redis常见命令

02-Redis常见命令 Redis数据结构介绍 Redis是一个key-value的数据库&#xff0c;key一般是String类型&#xff0c;不过value的类型多种多样&#xff1a; 贴心小建议&#xff1a;命令不要死记&#xff0c;学会查询就好啦 Redis为了方便学习&#xff0c;将操作不同数据类型的命…...

【论文阅读笔记】Text-to-SQL Empowered by Large Language Models: A Benchmark Evaluation

文章目录 Text-to-SQL Empowered by Large Language Models: A Benchmark Evaluation一、论文基本信息1. 文章标题2. 所属刊物/会议3. 发表年份4. 作者列表5. 发表单位 二、摘要三、解决问题四、创新点五、自己的见解和感想六、研究背景七、研究方法&#xff08;模型、实验数据…...

使用ArcPy进行栅格数据分析

设置工作环境 在开始编写脚本之前&#xff0c;需要设置好工作环境。这包括指定工作空间&#xff08;workspace&#xff09;和输出路径。工作空间是包含所有输入数据的文件夹或地理数据库&#xff0c;而输出路径则是处理结果将要保存的位置。 import arcpy from arcpy import …...

华为OD机试真题——告警抑制(2025A卷:100分)Java/python/JavaScript/C/C++/GO最佳实现

2025 A卷 100分 题型 本专栏内全部题目均提供Java、python、JavaScript、C、C++、GO六种语言的最佳实现方式; 并且每种语言均涵盖详细的问题分析、解题思路、代码实现、代码详解、3个测试用例以及综合分析; 本文收录于专栏:《2025华为OD真题目录+全流程解析+备考攻略+经验分…...

Java转Go日记(五十七):gin 中间件

1. 全局中间件 所有请求都经过此中间件 package mainimport ("fmt""time""github.com/gin-gonic/gin" )// 定义中间 func MiddleWare() gin.HandlerFunc {return func(c *gin.Context) {t : time.Now()fmt.Println("中间件开始执行了&quo…...

《树数据结构解析:核心概念、类型特性、应用场景及选择策略》

在数据结构中&#xff0c;树是一种分层的非线性数据结构&#xff0c;由节点和边组成&#xff0c;具有唯一根节点、子树分层结构和无环特性。其核心价值在于高效处理层次化数据或动态集合&#xff0c;广泛应用于算法、数据库、文件系统等领域。 一、树的核心概念 根节点&#…...

在本地查看服务器上的TensorBoard

建立本地服务器与远程服务器的通信&#xff0c;将TensorBoard的映射端口与本地端口连接起来&#xff0c;本地终端运行&#xff1a; ssh -L 本地端口:127.0.0.1:TensorBoard端口 用户名服务器的IP地址 -p 服务器登录端口 e.g. ssh -L 10010:127.0.0.1:39353 sx110.92.137.56 -…...

硬件开发全解:从入门教程到实战案例与丰富项目资源

硬件开发全解&#xff1a;从入门教程到实战案例与丰富项目资源 一、硬件开发基础 1.1 硬件开发概述 硬件开发&#xff0c;简单来说&#xff0c;就是从构思到实现一个电子设备的全过程。这一过程涉及到电子电路设计、嵌入式系统编程、传感器和执行器的集成等多个关键领域。在电子…...

嵌入式学习笔记 - freeRTOS的两种临界禁止

一 禁止中断 通过函数taskENTER_CRITICAL() &#xff0c;taskEXIT_CRITICAL()实现 更改就绪列表时&#xff0c;通常是通过禁止中断的方式&#xff0c;进入临界段&#xff0c;因为systick中断中有可以更改就绪列表的权利&#xff0c; 就绪列表&#xff08;如 pxReadyTasksLis…...

202403-02-相似度计算 csp认证

其实这个问题就是求两篇文章的词汇的交集和并集&#xff0c;首先一说到并集&#xff0c;我就想到了set集合数据结构&#xff0c;set中的元素必须唯一。 STL之set的基本使用–博客参考 所以将两个文章的词汇全部加入set中&#xff0c;并求出set的大小&#xff0c;即为并集的大小…...

【Oracle】游标

个人主页&#xff1a;Guiat 归属专栏&#xff1a;Oracle 文章目录 1. 游标基础概述1.1 游标的概念与作用1.2 游标的生命周期1.3 游标的分类 2. 显式游标2.1 显式游标的基本语法2.1.1 声明游标2.1.2 带参数的游标 2.2 游标的基本操作2.2.1 完整的游标操作示例 2.3 游标属性2.3.1…...

MySQL 中 char 与 varchar 的区别

在 MySQL 的字段类型中&#xff0c;char和varchar是用来处理字符串。本文来学习二者区别 一、本质区别&#xff1a;空间分配的 “固执” 与 “灵活” 1. char&#xff1a;空间占满 固定长度特性&#xff1a; 定义时指定长度&#xff08;如char(10)&#xff09;&#xff0c;无…...

DeepSeek 赋能智能零售,解锁动态定价新范式

目录 一、引言二、智能零售动态定价策略概述2.1 动态定价的概念与原理2.2 动态定价在智能零售中的重要性2.3 传统动态定价策略的局限性 三、DeepSeek 技术解析3.1 DeepSeek 的技术原理与架构3.2 DeepSeek 的优势与特点 四、DeepSeek 在智能零售动态定价中的应用机制4.1 数据收集…...

在Flutter中定义全局对象(如$http)而不需要import

在Flutter中定义全局对象&#xff08;如$http&#xff09;而不需要import 在Flutter中&#xff0c;有几种方法可以定义全局可访问的对象&#xff08;如$http&#xff09;而不需要在每个文件中import&#xff1a; 方法1&#xff1a;使用GetX的依赖注入&#xff08;推荐&#x…...

<4>, Qt窗口

目录 一&#xff0c;菜单栏 二&#xff0c;工具栏 三&#xff0c;状态栏 四&#xff0c;浮动窗口 五&#xff0c;对话框 一&#xff0c;菜单栏 MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow) {ui->setupUi(this);// 创建菜单栏…...

6.04打卡

浙大疏锦行 DAY 43 复习日 作业&#xff1a; kaggle找到一个图像数据集&#xff0c;用cnn网络进行训练并且用grad-cam做可视化 进阶&#xff1a;并拆分成多个文件 损失: 0.502 | 准确率: 75.53% 训练完成 import torch import torch.nn as nn import torch.optim as optim from…...

【基于SpringBoot的图书购买系统】操作Jedis对图书图书的增-删-改:从设计到实战的全栈开发指南

引言 在当今互联网应用开发中&#xff0c;缓存技术已成为提升系统性能和用户体验的关键组件。Redis作为一款高性能的键值存储数据库&#xff0c;以其丰富的数据结构、快速的读写能力和灵活的扩展性&#xff0c;被广泛应用于各类系统的缓存层设计。本文将围绕一个基于Redis的图…...

Ubuntu中TFTP服务器安装使用

TFTP服务器 在 Ubuntu 下使用 TFTP&#xff08;Trivial File Transfer Protocol&#xff09; 服务&#xff0c;通常用于简单的文件传输&#xff08;如网络设备固件更新、嵌入式开发等&#xff09;。 1 TFTP服务器安装 sudo apt-get install tftp-hpa sudo apt-get install…...