动态规划:积木画

news2024/12/25 16:20:36

积木画

问题描述

小明最近迷上了积木画, 有这么两种类型的积木, 分别为 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 区域构 成。小明需要用以上两种积木将画布拼满, 他想知道总共有多少种不同的方式? 积木可以任意旋转, 且画布的方向固定。

输入格式

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

输出格式

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

样例输入

3

样例输出

5

样例说明

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

图片描述

评测用例规模与约定

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

解题思路

定义 f [ n ] f[n] f[n]表示 2 × n 2\times n 2×n的画布的方案数,对于 I I I型积木而言,可以很容易推断出 f [ n ] f[n] f[n] f [ n − 1 ] , f [ n − 2 ] f[n-1],f[n-2] f[n1],f[n2]有关。

  1. 对于 2 × ( n − 1 ) 2 \times (n-1) 2×(n1)的画布的所有方案,在最后一列放一个 I I I型积木即可,也就是说 f [ n ] f[n] f[n]的方案数包括 f [ n − 1 ] f[n-1] f[n1]的方案数。
  2. 同理,对于 2 × ( n − 2 ) 2 \times (n-2) 2×(n2)的画布的所有方案,在最后两列横放两个 I I I型积木即可,也就是说 f [ n ] f[n] f[n]的方案数包括 f [ n − 2 ] f[n-2] f[n2]的方案数。
  3. L L L型积木—— L L L型积木只有当前 n − 2 n-2 n2列填满,第 n − 1 n-1 n1列只有1个单位填满时,才可以放在最后面。

这里记前 n n n列填满, n + 1 n+1 n+1列填了一个单位时的方案数为 g [ n ] g[n] g[n]。那么 f [ n ] f[n] f[n]的递推式可以通过上面三种情况求得:
f [ n ] = f [ n − 1 ] + f [ n − 2 ] + g [ n − 2 ] f[n]=f[n-1]+f[n-2]+g[n-2] f[n]=f[n1]+f[n2]+g[n2]
考虑 g [ n ] g[n] g[n]的推导:

  1. 所有的 g [ n − 1 ] g[n-1] g[n1]的情况后横放一个 I I I型积木即可变成 g [ n ] g[n] g[n]
  2. 所有的 f [ n − 1 ] f[n-1] f[n1]的情况后可以有两种方式放置 L L L型积木,可以变成 g [ n ] g[n] g[n]

因此有:
g [ n ] = g [ n − 1 ] + 2 ∗ f [ n − 1 ] g[n]=g[n-1]+2*f[n-1] g[n]=g[n1]+2f[n1]
同时维护 g , f g,f g,f,在实现时注意不断求余,防止运算溢出。

Code(Python3)(TLE)

由于 python 语言本身执行效率问题,使用相同算法的代码提交结果是超时,经过时间测试,该代码完成最大测试用例的时间在 6s 左右。

# -*- coding: utf-8 -*-
# @Author : BYW-yuwei
# @Software: python3.8.6
MOD=int(1e9+7)
maxn=int(1e7+10)

n=int(input())
f=[0]*(n+1)
g=[0]*(n+1)

f[0],f[1]=1,1
g[0],g[1]=0,2

for i in range(2,n+1):
    g[i]=(g[i-1]+2*f[i-1])%MOD
    f[i]=(f[i-1]+f[i-2]+g[i-2])%MOD
print(f[n])

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

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

相关文章

如何解读 Java 的继承和多态特性?

💂 个人网站:【海拥】【游戏大全】【神级源码资源网】🤟 前端学习课程:👉【28个案例趣学前端】【400个JS面试题】💅 寻找学习交流、摸鱼划水的小伙伴,请点击【摸鱼学习交流群】 目录 前言继承类的继承继承的…

Gartner宣布,亚马逊云科技全球数据库市场份额超四分之一

对比常规的基础设施上云和应用上云,企业对于数据上云一直保持最为慎重的态度。不过也不是一成不变的,Gartner前不久公布的一组数据显示,在2022年全球数据库管理系统的市场份额排名中,作为纯云厂商的亚马逊云科技,超越了老牌传统数据库厂商甲骨文和微软,首次位居第一。 降低企业…

Qt信号和信号槽(二)

目录 信号槽使用拓展 示例1(一个信号可以对应多个槽函数)(在上篇文章的代码中进行修改): 示例2(用信号连接信号): 信号槽的连接方式 示例: Lambda表达式 语法格式 定义和调用 信号槽使用拓…

【金融量化】如何筛选基金?

基金的评价与筛选 1 筛选步骤 1.1 股票型基金 (1)构建备选池 优先考虑股票配置较为稳定的基金,这样才能预估基金未来一段时间的表现,及其对基准股票指数的跟踪情况。因此,首先应该剔除那些仓位变化较大、本身在进行…

[刷题] 删除有序数组中的重复项

系列文章目录 删除有序数组中的重复项 文章目录 系列文章目录在这里插入图片描述 前言1、题目1.2、判题标准1.3、示例 2、解题2.1、双指针正向查找2.1、逆序删除 3、总结 前言 数据结构在程序世界里非常重要,尤其大厂面试是必考项目,今天随机到[删除有…

“三步走”构建全链路数据能力,助力企业全面唤醒数据价值

01 企业数字化转型加速前进,数据价值唤醒仍面临多重挑战 数字经济蓬勃发展时代,数据已成为关键生产要素。随着国家政策对数据要素价值释放的方向引领,数据赋能企业经营决策、业务模式创新的需求不断强化,以及新兴技术工具的有效支…

[LeetCode 1401]圆和矩形是否有重叠

题目描述 给你一个以 (radius, xCenter, yCenter) 表示的圆和一个与坐标轴平行的矩形 (x1, y1, x2, y2) ,其中 (x1, y1) 是矩形左下角的坐标,而 (x2, y2) 是右上角的坐标。 如果圆和矩形有重叠的部分,请你返回 true ,否则返回 f…

音乐格式转换器mp3免费方法?分享四个实用的!

在日常工作和娱乐中,我们经常会遇到并使用MP3这种音频格式。它以小文件尺寸和优秀音质为特点,成为许多音频文件的首选格式。然而,当我们面对其他音频格式时,可能需要进行转换为MP3的操作。因此,接下来我将向您分享4种简…

篇章十一 Vuex

文章目录 一、理解 Vuex1. 是什么2. 什么时候用 二、Vuex 工作原理三、Vuex 环境搭建四、四个 map 方法的使用五、模块化 命名空间 一、理解 Vuex 1. 是什么 Vue 中实现集中式状态(数据)管理的一个 Vue 插件,对 vue 应用中多个组件的共享状…

蓝牙室内定位|蓝牙信标iBeacon部署原则

室内定位导航给我们的工作生活带来了诸多的便利,越来越多的企业愿意来SKYLAB了解室内定位方案,并根据自己的实际应用需求来选择米级蓝牙室内定位方案和厘米级UWB室内定位方案。今天SKYLAB君就来简单介绍一下蓝牙Beacon室内定位导航方案中Beacon的部署原则…

JAVA基础:线程池的使用

目录 1.概述 2.线程池的优势​​​​​​​ 2.1.线程池为什么使用自定义方式? 2.2.封装的线程池工具类有什么好处? 3.线程池的七大参数 3.线程池的创建 3.1. 固定数量的线程池 3.2. 带缓存的线程池 3.3. 执⾏定时任务 3.4. 定时任务单线程 3.…

掌握唯米系统ChatGPT批量生成文章的操作技巧

以下是重写后的操作步骤: 1. 购买会员并添加个人的ChatGPT密钥: 首先,您需要购买唯米系统的会员,并获得访问ChatGPT的权限。随后,您可以将个人的ChatGPT密钥添加到系统中,以便使用该功能进行自然语言生成和…

Spring Session使用

一.使用场景 前后端不分离的情况下,往登陆页auth.gulimall.com的session中存放一个用户信息,想要在首页gulimall.com中取出该数据并展示出来 GetMapping("/oauth2.0/gitee/success")public String oauth2(RequestParam("code") Str…

组态王与PLC通过RJ45口建立无线以太网通讯

本文以组态王和2台三菱FX5u PLC为例,介绍组态王与多台 PLC的无线以太网通信实现过程。在本方案中采用了三菱PLC无线通讯终端DTD419MB,作为实现无线通讯的硬件设备。 在这一无线以太网通讯系统的搭建中,用户无需更改网络参数和原有程序&#…

Ubuntu的USB相关操作

这里写目录标题 0.信息查看1. 串口设备设置2. 串口调试助手 0.信息查看 指令lsusb输出Bus 004 Device 002: ID 05e3:0620 Genesys Logic, Inc. USB3.2 Hub Bus 004 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub Bus 003 Device 006: ID 5986:115f Acer, Inc Integ…

佩戴最舒服的蓝牙耳机推荐,好用、佩戴体验很不错的蓝牙耳机分享

​面对市面上不同场景使用、不同类型的蓝牙耳机,我们选购蓝牙耳机时应该如何选?最怕遇到耳机延迟高、不防水防汗、音质表现差以及佩戴体验差的蓝牙耳机,针对这些经常面临的问题,我这次精选了四款市面上热销质量不错的蓝牙耳机分享…

PMP考试经验分享,准备不要超过三个月‼️

因为各种原因(拖延、贪玩、上课 哈哈) 我是用一个半月时间准备的PMP考试 3A通过 努力➕幸运的结果 资料准备: PMBOK第六版和第七版(PMI官方教材) 机构的视频材料(巩固基础) 模拟题库&#…

计算机原理基础一

内存 计算机数据存储,存储数据的基本单位是字节(Byte),常说的大b,1字节等于8位,8个bit(小b)。每个字节都对应一个内存地址,内存地址是从0开始编写的,然后自增排列,类似数组,C当中空类的大小是1个字节,就是…

JUC并发工具类--AQS

JUC并发工具类--AQS 管程 — Java同步的设计思想MESA模型 AQS(AbstractQueuedSynchronizer:抽象队列同步器)AQS简介AQS核心结构AQS内部维护属性state。state三种访问方式 两种资源访问方式AQS实现时主要实现的方法isHeldExclusively()tryAcqu…

安全应急产业新标兵, 前沿科技保安全

推广行业前沿技术 服务部队练兵备战 助力应急强国建设 科学应急 一馆一园一平台 安全应急项目推荐 海淀区安全应急产品展示交易中心 同赴时代之约,共创美好未来。 指导单位 2023年4月12日上午, “海淀区安全应急产品展示交易中心“揭牌启动仪式在中…