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

2022年蓝桥杯省赛软件类C/C++B组----积木画

想借着这一个题回顾一下动态规划问题的基本解法,让解题方法清晰有条理,希望更多的人可以更轻松的理解动态规划!

目录

【题目】

【本题解题思路】

【DP模版】

总体方针:

具体解题时的套路:


 【题目】

 

  【本题解题思路】

———类似题目:覆盖墙壁 - 洛谷(很多经典题解在里面)

1、确定子状态:

我最终要求解的是:用两种类型的积木将2 x n的画卷填满时有着多少种组合方案。(围绕最终要求解的问题确定子问题)

所以子问题应该是在长度为n的情况下有多少种解法。

所以用一维数组dp[i] 存储长度为i 时的方案数。

2、确定转移的边界情况和初始状态:

这里先正着推,已知n=3时dp[3]=5,那么就可以先明确n=1,n=2时对应的dp[i],即dp[1]=1,dp[2]=2;

然后发现没有什么明显的规律呢,那就再倒着来

3、确定状态转移方式:

为了方便表述,设画卷长度为len;

我想知道画卷长度为len=n时的值,那么我就找他的上一层 len=n-1时的状态,看看有没有什么关联。为了形成填满画卷的状态,我的最后一块位置可以怎么摆放积木呢,从积木的两种类型出发,发现他可以形成四种状态。这里用分类的思想将所有的选择罗列出来,找规律。

如图所示,最后一次有如下选择:

(1)最后一次选竖着的I ,那么dp[n]=dp[n-1]。

因为最后一位固定好了就这一种选择,即1*dp[n-1]。如图1;

(2)最后一次选横着的I ,那么为了填补上画卷,第二行也只能选横着的I 这两个横着的I作为一个整体是一种填补画卷的方式。此时dp[n]=dp[n-2];

如图2所示。

前两种状态都很明显,但是如果选用L形的怎么罗列呢:

(3)L型垂直翻转前后算两种状态,如图3、4.  下面仅根据其中的一种情况来讨论,最后因为翻转所有的结果×2 即可。

A.可以用两个L形成长度为3的整体来填补画卷,dp[n]=dp[n-3],如图5;

B.采用两个L和一个横着的I的方式形成一个整体作为一种方法填补,dp[n]=dp[n-4],如图6;

C.同上,还可以采用在两侧两个L中间包裹多个横着的I的方式来填补,每多一个横着的I相当于这个用于填补的图像整体的长度+1。所以类推得到dp[n]=dp[n-5],dp[n-6],...  如图7;

综上所述,形成填满画卷的前一个整体的状态可以采用如上这些方式,所以他的方案总数就有:

dp[n]=dp[n-1]+dp[n-2]+2*(dp[n-3]+dp[n-4]+...dp[0]);

假如用前缀和sum[n]表示前n个长度的方案总和,dp[n]=sum[n-1]+sum[n-3];

但是我这里只求了n=1---3的情况,n=4时情况虽然有点复杂,但是也还是不好求(哈哈)。

所以有没有什么化简的方式呢,大家记不记得高考时第一个大题考的数组的性质,这里就可以用来变换公式;

dp[n]=sum[n-1]+sum[n-3];

dp[n-1]=sum[n-2]+sum[n-4];

上下相减发现  dp[n]-dp[n-1]=dp[n-1]+dp[n-3];

所以,dp[n]=2*dp[n-1]+dp[n-3]   

这就把递推公式推出来了,完美撒花!

【DP模版】

总体方针:

凡是动态规划问题,可以从以下三个角度考虑,确定求解问题的基本思路:

(有时是二维问题或者多维问题时可以考虑用二维或者多维数组)

动态规划问题具有两个性质:

(1)无后效性:每个子问题的解都是基于之前子问题的解,而不受后续子问题解的影响。这意味着我们可以独立地解决每个子问题,然后将这些解组合起来形成一个最优解。即当前状态的解只受此状态之前(就是过去的状态)的影响,一经确定,未来的状态不影响当前状态的结果。

(换成人话就是,当前状态的结果是由之前状态形成的,一旦确定,后续的状态对他没有影响)

(2)子问题重叠性:每个子问题之间类似于嵌套的关系,我想求这个子问题,就必须先解决比他规模更小的、具有同样规律的子问题。

具体解题时的套路:

1、按照题目的求解问题,确定子问题是什么,把存储每个子问题的数据结构定义出来;

2、根据题目中给的信息,自己推理、枚举出来所有的可以获得的关于解的信息,看看是否存在什么规律。这里推倒的方式往往是从边界开始往前推导,观察前后状态之间的联系。或者是从初始状态向后推导,找规律。


 

相关文章:

2022年蓝桥杯省赛软件类C/C++B组----积木画

想借着这一个题回顾一下动态规划问题的基本解法,让解题方法清晰有条理,希望更多的人可以更轻松的理解动态规划! 目录 【题目】 【本题解题思路】 【DP模版】 总体方针: 具体解题时的套路: 【题目】 【本题解题思…...

Python数据挖掘项目开发实战:使用朴素贝叶斯进行社会媒体挖掘

注意:本文下载的资源,与以下文章的思路有相同点,也有不同点,最终目标只是让读者从多维度去熟练掌握本知识点。 Python数据挖掘项目开发实战:使用朴素贝叶斯进行社会媒体挖掘 一、项目背景与目标 在社交媒体时代&…...

【DM8】ET SQL性能分析工具

通过统计SQL每个操作符的时间花费,从而定位到有性能问题的操作,指导用户去优化。 开启ET工具 INI参数: ENABLE_MONITOR1 MONITOR_SQL_EXEC1 查看参数 select * FROM v$dm_ini WHERE PARA_NAMEMONITOR_SQL_EXEC;SELECT * FROM v$dm_ini WH…...

001-谷粒商城-微服务剖析

1、架构图 还是很强的,该有的都有 2、微服务模块 SpringCloudAlibaba组件包括 SentinelNacosRocketMQSeata 搭配SpringCloudAlibaba组件 OpenFeignGateWayRibbn gateway使用了SpringWebFlux,前几天研究到,为什么springboot不直接使用Spri…...

vue实现前端打印效果

如图效果所示&#xff08;以下演示代码&#xff09; <template><div><el-button v-print"printObj" type"primary" plain click"handle">{{ text }}</el-button><div style"display: none"><div id…...

android wifi直连 wifip2pmanager

android wifi直连 wifip2pmanager&#xff1b;使用WiFi 直连&#xff0c;然后通过udp进行通讯。 Android WiFi 直连&#xff08;Wi-Fi Direct&#xff0c;也称为Wi-Fi P2P&#xff09;是一种让两台或多台设备通过Wi-Fi技术直接进行点对点连接的技术&#xff0c;无需借助传统的无…...

伸缩应用程序和执行滚动更新

&#x1f4d5;作者简介&#xff1a; 过去日记&#xff0c;致力于Java、GoLang,Rust等多种编程语言&#xff0c;热爱技术&#xff0c;喜欢游戏的博主。 &#x1f4d8;相关专栏Rust初阶教程、go语言基础系列、spring教程等&#xff0c;大家有兴趣的可以看一看 &#x1f4d9;Jav…...

解决WPS右键菜单冗余选项,去除WPS右键菜单选项

问题描述 安装WPS后&#xff0c;右键菜单会多出许多无用的选项&#xff0c;如何去除&#xff1f; 解决方法 按下WindowsS打开搜索栏&#xff0c;搜索配置工具打开 勾选所有的关闭和隐藏选项...

部署ELFK+zookeeper+kafka架构

目录 前言 一、环境部署 二、部署ELFK 1、ELFK ElasticSearch 集群部署 1.1 配置本地hosts文件 1.2 安装 elasticsearch-rpm 包并加载系统服务 1.3 修改 elasticsearch 主配置文件 1.4 创建数据存放路径并授权 1.5 启动elasticsearch是否成功开启 1.6 查看节点信息 …...

ActiveMQ 任意文件上传漏洞复现

一、使用弱口令登陆 ​ 访问 http://ip:8161/admin/ 进入admin登陆页面&#xff0c;使用弱口令登陆&#xff0c;账号密码皆为 admin&#xff0c;登陆成功后&#xff0c;headers中会出现验证信息 ​ 如&#xff1a; Authorization: Basic YWRtaW46YWRtaW4 # 二、利用PUT协议上…...

k8s实践总结

一、pod常用操作&#xff1a; 1、如何重启pod&#xff1f; 1.1 删除并重新创建Pod 这是最直接的方法。你可以通过kubectl命令行工具删除Pod&#xff0c;然后Kubernetes将基于其对应的Deployment、ReplicaSet或其他控制器自动重新创建它。 不建议并行删除全部pod&#xff0c…...

前端从零到一搭建脚手架并发布到npm

这里写自定义目录标题 为什么需要脚手架&#xff1f;前置-第三方工具的使用1. 创建demo并运行-4步新建文件夹 zyfcli&#xff0c;并初始化npm init -y配置入口文件 2.commander-命令行指令3. chalk-命令行美化工具4. inquirer-命令行交互工具5. figlet-艺术字6. ora-loading工具…...

使用 git 提交项目到 github

文章推荐&#xff1a;https://zhuanlan.zhihu.com/p/193140870 连接失败&#xff1a;https://zhuanlan.zhihu.com/p/521340971 分支出错&#xff1a;https://blog.csdn.net/gongdamrgao/article/details/115032436...

SRE 与传统 IT 运营有何不同?

软件开发和部署方法的发展要求组织管理和维护 IT 基础设施的方式发生转变。站点可靠性工程(SRE) 是一门将软件工程的各个方面融入 IT 运营的学科&#xff0c;处于这一变革的前沿。随着专业人士和组织都寻求适应&#xff0c;对 SRE 认证和培训计划的需求激增。本博客探讨了 SRE …...

html公众号页面实现点击按钮跳转到导航

实现效果&#xff1a; 点击导航自动跳转到&#xff1a; html页面代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>跳转导航</title><meta name"keywords" conten…...

【算法】快速排序的基本思想、优化 | 挖坑填补法和区间分割法

创作不易&#xff0c;本篇文章如果帮助到了你&#xff0c;还请点赞 关注支持一下♡>&#x16966;<)!! 主页专栏有更多知识&#xff0c;如有疑问欢迎大家指正讨论&#xff0c;共同进步&#xff01; 更多算法分析与设计知识专栏&#xff1a;算法分析&#x1f525; 给大家跳…...

OSPF动态路由实验(华为)

思科设备参考&#xff1a;OSPF动态路由实验&#xff08;思科&#xff09; 一&#xff0c;技术简介 OSPF&#xff08;Open Shortest Path First&#xff09;是一种内部网关协议&#xff0c;主要用于在单一自治系统内决策路由。它是一种基于链路状态的路由协议&#xff0c;通过…...

EasyRecovery2024专业免费的电脑数据恢复软件

EasyRecovery数据恢复软件是一款功能强大的数据恢复工具&#xff0c;广泛应用于各种数据丢失场景&#xff0c;帮助用户从不同类型的存储介质中恢复丢失或删除的文件。 该软件支持恢复的数据类型非常广泛&#xff0c;包括但不限于办公文档、图片、音频、视频、电子邮件以及各种…...

Vue集成PageOffice实现在线编辑word、excel(前端配置)

一、什么是PageOffice PageOffice是一款在线的office编辑软件&#xff0c;帮助Web应用系统或Web网站实现用户在线编辑Word、Excel、PowerPoint文档。可以完美实现在线公文流转&#xff0c;领导批阅&#xff0c;盖章。可以给文件添加水印&#xff0c;在线安全预览防止用户下载…...

IBM SPSS Statistics for Mac:数据分析的卓越工具

IBM SPSS Statistics for Mac是一款功能强大的数据分析软件&#xff0c;专为Mac用户设计&#xff0c;提供了一系列专业的统计分析和数据管理功能。无论是科研人员、数据分析师还是学生&#xff0c;都能从中获得高效、准确的数据分析支持。 IBM SPSS Statistics for Mac v27.0.1…...

树莓派超全系列教程文档--(61)树莓派摄像头高级使用方法

树莓派摄像头高级使用方法 配置通过调谐文件来调整相机行为 使用多个摄像头安装 libcam 和 rpicam-apps依赖关系开发包 文章来源&#xff1a; http://raspberry.dns8844.cn/documentation 原文网址 配置 大多数用例自动工作&#xff0c;无需更改相机配置。但是&#xff0c;一…...

进程地址空间(比特课总结)

一、进程地址空间 1. 环境变量 1 &#xff09;⽤户级环境变量与系统级环境变量 全局属性&#xff1a;环境变量具有全局属性&#xff0c;会被⼦进程继承。例如当bash启动⼦进程时&#xff0c;环 境变量会⾃动传递给⼦进程。 本地变量限制&#xff1a;本地变量只在当前进程(ba…...

【OSG学习笔记】Day 18: 碰撞检测与物理交互

物理引擎&#xff08;Physics Engine&#xff09; 物理引擎 是一种通过计算机模拟物理规律&#xff08;如力学、碰撞、重力、流体动力学等&#xff09;的软件工具或库。 它的核心目标是在虚拟环境中逼真地模拟物体的运动和交互&#xff0c;广泛应用于 游戏开发、动画制作、虚…...

线程与协程

1. 线程与协程 1.1. “函数调用级别”的切换、上下文切换 1. 函数调用级别的切换 “函数调用级别的切换”是指&#xff1a;像函数调用/返回一样轻量地完成任务切换。 举例说明&#xff1a; 当你在程序中写一个函数调用&#xff1a; funcA() 然后 funcA 执行完后返回&…...

Auto-Coder使用GPT-4o完成:在用TabPFN这个模型构建一个预测未来3天涨跌的分类任务

通过akshare库&#xff0c;获取股票数据&#xff0c;并生成TabPFN这个模型 可以识别、处理的格式&#xff0c;写一个完整的预处理示例&#xff0c;并构建一个预测未来 3 天股价涨跌的分类任务 用TabPFN这个模型构建一个预测未来 3 天股价涨跌的分类任务&#xff0c;进行预测并输…...

优选算法第十二讲:队列 + 宽搜 优先级队列

优选算法第十二讲&#xff1a;队列 宽搜 && 优先级队列 1.N叉树的层序遍历2.二叉树的锯齿型层序遍历3.二叉树最大宽度4.在每个树行中找最大值5.优先级队列 -- 最后一块石头的重量6.数据流中的第K大元素7.前K个高频单词8.数据流的中位数 1.N叉树的层序遍历 2.二叉树的锯…...

算法岗面试经验分享-大模型篇

文章目录 A 基础语言模型A.1 TransformerA.2 Bert B 大语言模型结构B.1 GPTB.2 LLamaB.3 ChatGLMB.4 Qwen C 大语言模型微调C.1 Fine-tuningC.2 Adapter-tuningC.3 Prefix-tuningC.4 P-tuningC.5 LoRA A 基础语言模型 A.1 Transformer &#xff08;1&#xff09;资源 论文&a…...

《C++ 模板》

目录 函数模板 类模板 非类型模板参数 模板特化 函数模板特化 类模板的特化 模板&#xff0c;就像一个模具&#xff0c;里面可以将不同类型的材料做成一个形状&#xff0c;其分为函数模板和类模板。 函数模板 函数模板可以简化函数重载的代码。格式&#xff1a;templa…...

智能AI电话机器人系统的识别能力现状与发展水平

一、引言 随着人工智能技术的飞速发展&#xff0c;AI电话机器人系统已经从简单的自动应答工具演变为具备复杂交互能力的智能助手。这类系统结合了语音识别、自然语言处理、情感计算和机器学习等多项前沿技术&#xff0c;在客户服务、营销推广、信息查询等领域发挥着越来越重要…...

基于SpringBoot在线拍卖系统的设计和实现

摘 要 随着社会的发展&#xff0c;社会的各行各业都在利用信息化时代的优势。计算机的优势和普及使得各种信息系统的开发成为必需。 在线拍卖系统&#xff0c;主要的模块包括管理员&#xff1b;首页、个人中心、用户管理、商品类型管理、拍卖商品管理、历史竞拍管理、竞拍订单…...