蓝桥杯 2022 省B 积木画

news2024/11/18 7:37:37

这是个典型的动态规划问题,重点在于找到他的递推方程。

可简单算出填满第0 1 2 3 4列个数为0 1 2 5 11;
运气好点,找到递推公式dp[i]=2*dp[i-1]+dp[i-3];
直接解决了。

但我们还是按照动态规划一步一步来。

思路分析:

  1. 状态定义

    • dp[i][j] 表示在第 i 步时,处于状态 j 的方案数。其中,状态 j 有三种可能性:
      • j = 0 表示在第 i 步时处于上突状态。
      • j = 1 表示在第 i 步时处于占满状态。
      • j = 2 表示在第 i 步时处于下突状态。
  2. 初始状态

    • 初始时,只有在第 0 步处于占满状态的方案数为 1,其他状态的方案数都为 0,即 dp[0][1] = 1
  3. 状态转移方程

    • 对于每一步 i,可以根据前一步的状态推导出当前步的状态。
    • 上突状态 (j = 0) 可以由下一步的下突状态 (j = 2) 和当前步的占满状态 (j = 1) 推导得到,即 dp[i][0] = (dp[i - 2][1] + dp[i - 1][2]) % mod
    • 占满状态 (j = 1) 可以由前一步的三种状态得到,即 dp[i][1] = ((dp[i - 2][1] + dp[i - 1][1]) % mod + (dp[i - 1][0] + dp[i - 1][2]) % mod) % mod
    • 下突状态 (j = 2) 可以由上一步的下突状态 (j = 0) 和当前步的上突状态 (j = 1) 推导得到,即 dp[i][2] = (dp[i - 2][1] + dp[i - 1][0]) % mod
  4. 边界条件

    • 对于 i = 0i = 1,已知初始状态,无需计算。
    • 对于 i = 2,根据情况可直接给出结果。
  5. 结果输出

    • 输出填满一个大小为 2 × 2 × n 的画布所需的不同方式数,即 dp[n][1]

综上所述,这段代码使用动态规划的思想,通过状态转移方程计算填满画布所需的不同方式数,并输出结果。

#include<iostream>
#include<bits/stdc++.h>
using namespace std;

const int mod = 1e9 + 7; // 定义取模的值

int n, dp[10000005][3]; // n表示输入的整数,dp用于存储状态

int main() {
    cin >> n; // 读取输入的整数

    dp[0][1] = 1; // 初始状态:在第0步处于状态1(即占满状态)的方案数为1

    // 动态规划计算每一步的方案数
    for (int i = 1; i <= n; i++) {
        // 状态转移方程:
        // 0为上突,2为下突,1为占满
        dp[i][0] = (dp[i - 2][1] + dp[i - 1][2]) % mod; // 上突状态的方案数等于在第i-2步处于下突状态的方案数与在第i-1步处于占满状态的方案数之和
        dp[i][1] = ((dp[i - 2][1] + dp[i - 1][1]) % mod + (dp[i - 1][0] + dp[i - 1][2]) % mod) % mod; // 占满状态的方案数等于在第i-2步处于占满状态的方案数与在第i-1步处于占满状态的方案数之和,以及在第i-1步处于上突状态的方案数与下突状态的方案数之和
        dp[i][2] = (dp[i - 2][1] + dp[i - 1][0]) % mod; // 下突状态的方案数等于在第i-2步处于占满状态的方案数与在第i-1步处于上突状态的方案数之和
    }

    cout << dp[n][1]; // 输出填满一个大小为2 × 2 × n的画布所需的不同方式数

    return 0;
}

占满状态有个很不好想到的类型,就是dp[i-2][1],本来我们都是只考虑加一个积木后的情景,因为我们不考虑除了上下突和占满的其他情况,有种情况是0000,这个情况上下两行相差2格,不属
                                                                                          00
于三种情况,而这样的情况,从i-2到i可以有两个横着放的I这种情况,而竖着放的I的情况与i-1加个竖着的I的情况重合了。
 

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

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

相关文章

css3鼠标悬停图片特效,图片悬停效果源码

特效介绍 css3鼠标悬停图片特效,图片悬停效果源码&#xff0c;可以在网页上面作为自己的动态加载名片&#xff0c;放到侧边栏或者网站合适的位置即可 动态效果 代码下载 css3鼠标悬停图片特效,图片悬停效果源码

docker进阶篇,docker集群介绍

docker swarm 官网&#xff1a;https://docs.docker.com/engine/swarm/how-swarm-mode-works/nodes/ 什么是 docker swarm docker swarm 是 docker 官方提供的容器编排和集群管理工具。它允许用户将多个 docker 主机组成一个虚拟的 docker 集群&#xff0c;以便更高效地管理…

解决用POI库生成的word文件中的表格在python-docx无法解析的问题

问题背景 用apache-poi生成word文件中表格&#xff0c;在使用python-docx库解析时报错&#xff1a; 问题分析 1. word文档本质上是一个rar压缩包&#xff0c;用winrar解析后如下&#xff1a; 2. 查看document.xml&#xff0c;可以看到table元素下面是没有<w:tblGrid>这…

HTTP --- 上

目录 1. HTTP协议 2. 认识URL 2.1. URL中的四个主要字段 2.2. URL Encode && URL Decode 3. HTTP 协议格式 3.1. 快速构建 HTTP 请求和响应的报文格式 3.1.1. HTTP 请求格式 3.1.2. HTTP 响应格式 3.1.3. 关于 HTTP 请求 && 响应的宏观理解 3.2. 实现…

基于PID控制器的四旋翼无人机控制系统的simulink建模与仿真,并输出虚拟现实动画

目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 4.1四旋翼无人机的动力学模型 4.2 PID控制器设计 4.3 姿态控制实现 4.4 VR虚拟现实动画展示 5.完整工程文件 1.课题概述 基于PID控制器的四旋翼无人机控制系统的simulink建模与仿真,并输出vr虚拟现实…

CI/CD环境搭建

服务简介 Gitlab 官网&#xff1a;https://about.gitlab.com/ GitLab 是一个用于仓库管理系统的开源项目&#xff0c;使用Git作为代码管理工具&#xff0c;并在此基础上搭建起来的Web服务。安装方法是参考GitLab在GitHub上的Wiki页面。Gitlab是被广泛使用的基于git的开源代码管…

每日一题——LeetCode1720.解码异或后的数组

方法一 异或运算的性质 encoded[i−1]arr[i−1]⊕arr[i] 在等式两边同时异或arr[i−1] 由于&#xff1a; 一个数异或它自己&#xff0c;结果总是0。 0异或任何数&#xff0c;结果都是那个数本身。 所以等式可以转化为&#xff1a; arr[i]arr[i−1]⊕encoded[i−1] 由于 a…

智慧工业园区的物联网解决方案

智慧工业园区的物联网解决方案 智慧工业园区的物联网解决方案&#xff0c;是一种深度融合物联网、大数据、云计算及人工智能等前沿技术&#xff0c;以实现工业园区全方位、智能化管理与服务的综合体系。该方案旨在通过高效采集和分析园区内的各类实时数据&#xff0c;构建出一…

什么是PLC物联网关?PLC物联网关有哪些功能?

在数字化浪潮的推动下&#xff0c;工业物联网&#xff08;IIoT&#xff09;正逐步成为推动制造业智能化转型的关键力量。而在这一变革中&#xff0c;PLC物联网关扮演着至关重要的角色。今天&#xff0c;就让我们一起走进PLC物联网关的世界&#xff0c;了解它的定义、功能&#…

直播行业网络安全建设

一、引言 直播行业近年来蓬勃发展&#xff0c;吸引了大量用户和资本的关注。然而&#xff0c;随着行业的壮大&#xff0c;网络安全问题也日益凸显。构建一个安全、稳定的直播行业网络对于保障用户权益、维护行业秩序具有重要意义。本文将详细探讨直播行业安全网络的构建与保障…

【算法刷题 | 二叉树 02】3.21 二叉树的层序遍历01(5题:二叉树的层序遍历、层序遍历||、右视图、层平均值,以及N叉树的层序遍历)

文章目录 5.二叉树的层序遍历5.1 102_二叉树的层序遍历5.1.1问题5.1.2解法&#xff1a;队列 5.2 107_二叉树的层序遍历||5.2.1问题5.2.2解法&#xff1a;队列 5.3 199_二叉树的右视图5.3.1问题5.3.2解决&#xff1a;队列 5.4 637_二叉树的层平均值5.4.1问题5.4.2解决&#xff1…

VScode通过ssh连接github

通过ssh连接github 1.生成公钥和私钥2.设置config文件3.配置ssh免密登录4.远程仓库初始化 1.生成公钥和私钥 首先选择一个文件夹&#xff0c;右击 git bash here&#xff0c;在命令行输入命令&#xff0c;按下三次回车生成一个**.ssh文件夹**&#xff0c;一般在用户的user根目…

跳过mysql权限验证来修改密码-GPT纯享版

建议重新配置一遍&#xff0c;弄成功好多次了&#xff0c;每次都出bug&#xff0c;又要重新弄&#xff0c;不是过期就是又登不进去了&#xff0c;我服了 电脑配置MySQL环境&#xff08;详细&#xff09;这个哥们的10min配完&#xff0c;轻轻松松&#xff0c; 旧方法&#xff…

第十四届蓝桥杯JavaB组省赛真题 - 幸运数字

进制转换可以参考如下的十进制&#xff0c;基本一样的&#xff0c;只是把10变成了其他数字&#xff0c; sum就是各个数位之和 public static int myUtil(int n) {int sum 0;while(n > 0) {sum n % 10;n / 10;}return sum;} 注意&#xff1a; 如果写在同一个类里面&…

北京中科富海低温科技有限公司确认出席2024第三届中国氢能国际峰会

会议背景 随着全球对清洁能源的迫切需求&#xff0c;氢能能源转型、工业应用、交通运输等方面具有广阔前景&#xff0c;氢能也成为应对气候变化的重要解决方案。根据德勤的报告显示&#xff0c;到2050年&#xff0c;绿色氢能将有1.4万亿美元市场。氢能产业的各环节的关键技术突…

Gavin Wood 精彩演讲|安全灵活 JAM 链,打造去中心化多核计算机

Polkadot 年度开发者大会 sub0 Asia 近期在泰国曼谷正式落幕。面对区块链行业的激烈竞争&#xff0c;Polkadot 创始人 Gavin Wood 在演讲中说明将如何利用 Polkadot 2.0 与 JAM 链带来新的技术创新&#xff0c;推动生态持续发展。 Polkadot 将推一个名为 JAM 链的新网络。JAM …

Nature:“量子龙卷风”首次模拟黑洞

科学家们在超流体氦气中首次创造出了一个巨大的“量子漩涡”&#xff08;quantum vortex&#xff09;&#xff0c;用以模拟黑洞。这一成就不仅使他们能够更加细致地观察模拟黑洞的行为&#xff0c;还能探究其与周围环境的交互作用。 诺丁汉大学的研究团队与伦敦国王学院和纽卡斯…

python - 更改pdf中文本的字体高亮颜色(fitz模块)

import fitzdoc fitz.open(r"e:/test.pdf") pagedoc[0]# 按照指定的位置设置颜色 highlight page.add_highlight_annot((20, 500,60, 520)) highlight.set_colors(stroke[1, 1, 0]) # light red color (r, g, b) 颜色rgb每个除以255得出 highlight.update()# 按照…

序列的使用

目录 序列的创建 序列的使 Oracle从入门到总裁:​​​​​​https://blog.csdn.net/weixin_67859959/article/details/135209645 在许多数据库之中都会存在有一种数据类型 — 自动增长列&#xff0c;它能够创建流水号。如果想在 Oracle 中实现这样的自动增长列&#xff0c;可…

学习几个地图组件(基于react)

去年开发时用的公司封装的地图组件&#xff0c;挺方便的&#xff0c;但是拓展性不强&#xff0c;所以看看有哪些优秀的开源地图组件吧 1、React Leaflet 介绍&#xff1a;开源的JavaScript库&#xff0c;用于在web上制作交互式地图&#xff0c;允许你使用React组件的方式在应…