NO.84十六届蓝桥杯备战|动态规划-路径类DP|矩阵的最小路径和|迷雾森林|过河卒|方格取数(C++)
路径类dp是线性dp的⼀种,它是在⼀个n×m的矩阵中设置⼀个⾏⾛规则,研究从起点⾛到终点的⽅案数、最⼩路径和或者最⼤路径和等等的问题
矩阵的最小路径和_牛客题霸_牛客网
![![[Pasted image 20250409194955.png]]](https://i-blog.csdnimg.cn/direct/43048a74f191421d8cf57ff5b10d3fcc.png)
- 状态表⽰:
dp[i][j]表⽰:到达[i, j]位置处,最⼩路径和是多少。
那我们的最终结果就是dp[n][m]。 - 状态转移:
到达[i, j]位置之前的⼀⼩步,有两种情况:
i. 从[i - 1, j]向下⾛⼀步,转移到[i, j]位置;
ii. 从[i, j - 1]向右⾛⼀步,转移到[i, j]位置。
由于到[i, j]位置两种情况,并且我们要找的是最⼩路径,因此只需要这两种情况下的最⼩值,再加上[i,j]位置上本⾝的值即可:dp[i][j] = min(dp[i - 1][j], dp[i][j - 1]) + a[i][j]。 - 初始化:
第⼀⾏和第⼀列是要初始化的,因为会越界访问。
但是如果把整张表初始化为⽆穷⼤,然后把dp[0][1]和dp[1][0]的值设为0,后续填表就是正确的。 - 填表顺序:
根据「状态转移⽅程」的推导来看,填表的顺序就是「从上往下」填每⼀⾏,每⼀⾏「从左往
后」
#include <bits/stdc++.h>
using namespace std;const int N = 510;int n, m;
int f[N][N];int main()
{ios::sync_with_stdio(false);cin.tie(0);cin >> n >> m;//初始化memset(f, 0x3f, sizeof f);f[0][1] = 0;for (int i = 1; i <= n; i++){for (int j = 1; j <= m; j++){int x; cin >> x;f[i][j] = min(f[i-1][j], f[i][j-1]) + x;}}cout << f[n][m] << endl;return 0;
}
迷雾森林
- 状态表⽰:
f[i][j]表⽰:到达[i, j]位置时,有多少种⽅案。
那么f[1][m]就是我们要的结果。 - 状态转移⽅程:
a. 如果[i, j]位置是空地,到达[i, j]位置有两种⽅式:
- 从
[i + 1, j]向上⾛⼀步,此时的⽅案数为f[i + 1][j]; - 从
[i, j - 1]向右⾛⼀步,此时的⽅案数为f[i][j - 1]。
两者总和就是到达[i, j]位置的总⽅案数。
b. 如果[i, j]位置是树,⽆法⾛到,f[i][j] = 0。
- 初始化:
可以在原始矩阵的规模上多加上⼀⾏和⼀列,把f[n + 1][1]或者f[n][0]初始化为1,这样后
续填表就会有意义。 - 填表顺序:
从下往上每⼀⾏,每⼀⾏从左往右
#include <bits/stdc++.h>
using namespace std;const int N = 3010, MOD = 2333;int n, m;
int a[N][N];
int f[N][N];int main()
{ios::sync_with_stdio(false);cin.tie(0);cin >> n >> m;for (int i = 1; i <= n; i++)for (int j = 1; j <= m; j++)cin >> a[i][j];//初始化f[n][0] = 1;for (int i = n; i >= 1; i--)for (int j = 1; j <= m; j++)if (a[i][j] == 0)f[i][j] = (f[i][j-1] + f[i+1][j]) % MOD;cout << f[1][m] << endl;return 0;
}
P1002 [NOIP 2002 普及组] 过河卒 - 洛谷
![![[Pasted image 20250409204459.png]]](https://i-blog.csdnimg.cn/direct/f0111013fae6450abae343901f4c5838.png)
- 状态表⽰:
f[i][j]表⽰:到达[i, j]位置的⽅案数。
那么f[n][m]就是我们要的结果。 - 状态转移⽅程:
a. 如果[i, j]位置能⾛到,到达[i, j]位置之前的⼀⼩步,有两种情况:
- 从
[i - 1, j]向下⾛⼀步,⾛到[i, j],此时的⽅案数为f[i - 1][j]; - 从
[i, j - 1]向右⾛⼀步,⾛到[i, j],此时的⽅案数为f[i][j - 1];
那么总⽅案数f[i][j] = f[i - 1][j] + f[i][j - 1]。
b. 如果[i, j]位置⾛不到,f[i][j] = 0。
- 初始化:
我们可以给原始的矩阵多加⼀⾏多加⼀列,n, m, x, y全部+1 ,这样填任何⼀个位置都不会越
界。
然后初始化f[1][0] = 1或者f[0][1] = 1,保证后续填表正确即可。 - 填表顺序:
从上往下每⼀⾏,每⼀⾏从左往右
#include <bits/stdc++.h>
using namespace std;typedef long long LL;const int N = 25;int n, m, a, b;
LL f[N][N];bool check(int i, int j)
{return (i == a && j == b) || (i != a && j != b && abs(i - a) + abs(j - b) == 3);
}int main()
{ios::sync_with_stdio(false);cin.tie(0);cin >> n >> m >> a >> b;n++; m++; a++; b++;//初始化f[0][1] = 1;for (int i = 1; i <= n; i++)for (int j = 1; j <= m; j++){if (check(i, j)) continue;f[i][j] = f[i-1][j] + f[i][j-1];}cout << f[n][m] << endl;return 0;
}
P1004 [NOIP 2000 提高组] 方格取数 - 洛谷
![![[Pasted image 20250409212610.png]]](https://i-blog.csdnimg.cn/direct/5ec4ce00dbc2404488daa61e239c25a7.png)
贪⼼+两次dp是错误的,因为两次最优不等于全局最优,可以举出反例。正解应该是同时去⾛两条路,两者相互影响,所以放在⼀起考虑。
- 状态表⽰:
需要知道当前这两条路径⾛到什么位置,因此需要四维 f [ i 1 ] [ j 1 ] [ i 2 ] [ j 2 ] f[i_{1}][j_{1}][i_{2}][j_{2}] f[i1][j1][i2][j2]来表⽰第⼀条路⾛到 [ i 1 ] [ j 1 ] [i_{1}][j_{1}] [i1][j1]第⼆条路⾛到 [ i 2 ] [ j 2 ] [i_{2}][j_{2}] [i2][j2] 。
但是我们发现,因为两者是同时出发的,所以横纵坐标之和是⼀个定值。也就是说,只要知道了横纵坐标之和,以及两者的横坐标,就可以计算出纵坐标,状态表⽰就可以优化掉⼀维。
优化后的状态表⽰: f [ s t ] [ i 1 ] [ i 2 ] f[st][i_{1}][i_{2}] f[st][i1][i2]表⽰:第⼀条路在 [ i 1 , s t − i 1 ] [i_{1},st-i_{1}] [i1,st−i1] ,第⼆条路在 [ i 2 , s t − i 2 ] [i_{2},st-i_{2}] [i2,st−i2]时,两者的路径最⼤和。那我们的最终结果就是 f [ n × 2 ] [ n ] [ n ] f[n \times 2][n][n] f[n×2][n][n] 。 - 状态转移⽅程:
第⼀条路可以从上 [ i 1 − 1 , s t − i 1 ] [i_{1}-1,st-i_{1}] [i1−1,st−i1]或者左 [ i 1 , s t − i 1 − 1 ] [i_{1},st-i_{1}-1] [i1,st−i1−1]⾛到 [ i 1 , s t − i 1 ] [i_{1},st-i_{1}] [i1,st−i1]位置;第⼆条路可
以从上 [ i 2 − 1 , s t − i 2 ] [i_{2}-1,st-i_{2}] [i2−1,st−i2]或者左 [ i 2 , s t − i 2 − 1 ] [i_{2},st-i_{2}-1] [i2,st−i2−1]⾛到 [ i 2 , s t − i 2 ] [i_{2},st-i_{2}] [i2,st−i2]位置。排列组合⼀下⼀共4中情况,分别是:
- 上+上,此时的最⼤和为:
f[st - 1][i1 - 1][i2 - 1]; - 上+左,此时的最⼤和为:
f[st - 1][i1 - 1][i2]; - 左+上,此时的最⼤和为:
f[st - 1][i1 2 ][i - 1]; - 左+左,此时的最⼤和为:
f[st - 1][i1 2 ][i ];
取上⾯四种情况的最⼤值,然后再加上a[i1][j1]和a[i2][j2]。但是要注意,如果两个路径当前在同⼀位置时,只⽤加上⼀个a[i1][j1]即可
- 初始化:
算的是路径和,0 不会影响最终结果,直接填表。 - 填表顺序:
先从⼩到⼤循环横纵坐标之和,然后依次从⼩到⼤循环两者的横坐标
#include <bits/stdc++.h>
using namespace std;const int N = 15;
int n;
int a[N][N];
int f[N*2][N][N];int main()
{ios::sync_with_stdio(false);cin.tie(0);cin >> n;int x, y, w;while (cin >> x >> y >> w, x){a[x][y] = w; }for (int s = 2; s <= n+n; s++){for (int i1 = 1; i1 <= n; i1++){for (int i2 = 1; i2 <= n; i2++){int j1 = s - i1, j2 = s - i2;if (j1 <= 0 || j1 > n || j2 <= 0 || j2 > n) continue;int t = f[s-1][i1][i2];t = max(t, f[s-1][i1][i2-1]);t = max(t, f[s-1][i1-1][i2]);t = max(t, f[s-1][i1-1][i2-1]);if (i1 == i2){f[s][i1][i2] = t + a[i1][j1];}else{f[s][i1][i2] = t + a[i1][j1] + a[i2][j2];}}}}cout << f[n+n][n][n] << endl;return 0;
}
相关文章:
NO.84十六届蓝桥杯备战|动态规划-路径类DP|矩阵的最小路径和|迷雾森林|过河卒|方格取数(C++)
路径类dp是线性dp的⼀种,它是在⼀个nm的矩阵中设置⼀个⾏⾛规则,研究从起点⾛到终点的⽅案数、最⼩路径和或者最⼤路径和等等的问题 矩阵的最小路径和_牛客题霸_牛客网 状态表⽰: dp[i][j]表⽰:到达[i, j]位置处,最⼩…...
React + TipTap 富文本编辑器 实现消息列表展示,类似Slack,Deepseek等对话框功能
经过几天折腾再折腾,弄出来了,弄出来了!!! 消息展示 在位编辑功能。 两个tiptap实例1个用来展示 消息列表,一个用来在位编辑消息。 tiptap灵活富文本编辑器,拓展性太好了!!! !!! 关键点&#x…...
博途 TIA Portal之1200做主站与汇川EASY的TCP通讯
前言,虽然已经做了几篇关于TCP通讯的文章,但是不同的PLC之间的配合可能不同,下面将演示这种差异。 关于汇川EASY做从站的配置请参见下方链接文章:汇川EASY系列之以太网通讯(套接字socket做从站)_汇川以太网tcp套接字fb块-CSDN博客 1、硬件准备: 1200PLC,汇川EASY320…...
蓝桥杯速成刷题清单(上)
一、1.排序 - 蓝桥云课 (快速排序)算法代码: #include <bits/stdc.h> using namespace std; const int N 5e5 10; int a[N];int main() {int n;cin >> n;for (int i 0; i < n; i) {cin >> a[i];}sort(a, a n);for …...
力扣第444场周赛
这次力扣周赛对我来说难度确实大, 只做出两题, 但还是想分享一下的做题经验和感受 1. 移除最小数对使数组有序 I 题目链接:力扣 给你一个数组 nums,你可以执行以下操作任意次数: 选择 相邻 元素对中 和最小 的一对。如果存在多个这样的对&a…...
Redis 持久化机制详解:RDB/AOF 过程、优缺点及配置。Redis持久化中的Fork与Copy-on-Write技术解析。
Redis 持久化机制详解:RDB/AOF 过程、优缺点及配置 一、RDB 持久化过程及特性 核心机制 生成快照:通过 fork 子进程生成内存数据的二进制快照文件(.rdb),父进程继续处理请求。写时复制(Copy-On-Write&…...
Go并发背后的双引擎:CSP通信模型与GMP调度|Go语言进阶(4)
为什么需要理解CSP与GMP? 当我们启动一个Go程序时,可能会创建成千上万个goroutine,它们是如何被调度到有限的CPU核心上的?为什么Go能够如此轻松地处理高并发场景?为什么有时候我们的并发程序会出现奇怪的性能瓶颈&…...
docker内安装达梦8数据库
1. 其他机器上实现挂载ISO # 1. 确保挂载点目录存在(你已经创建了dm8目录) ls -ld dm8# 2. 使用正确的mount命令挂载ISO sudo mount -o loop dm8_20250117_HWarm920_kylin10_sp1_64.iso dm8# 3. 验证是否挂载成功 mount | grep dm8 ls dm82. docker内运…...
UDP怎么样实现可靠传输?
如果需要在基于UDP的应用中实现可靠传输(例如确保数据不丢失、按顺序到达等),通常需要在应用层实现相应的机制。 1. 确认应答机制 应用层可以使用确认应答机制来确保数据的可靠传输。当发送方发送一个数据包时,接收方收到数据包…...
代码随想录算法训练营Day25
一、力扣93.复原IP地址【medium】 题目链接:力扣93.复原IP地址 left x300 视频链接:代码随想录 1、思路 时间复杂度: O ( n ) O(n) O(n) 2、代码 class Solution:def restoreIpAddresses(self, s: str) -> List[str]:n len(s)ans []…...
Linux服务器——Samba服务器
简介 Samba 是一个开源的跨平台文件共享服务,允许 Linux/Unix 系统与 Windows 系统实现文件和打印机的共享与互操作。其核心协议为 SMB/CIFS(Server Message Block / Common Internet File System),是 Windows 网络中…...
华为网路设备学习-17
目录 一、加密算法 二、验证算法 三、IPsec协议 1.IKE协议(密钥交换协议) ①ISAKMP(Internet Security Association and Key Management Protocol)互联网安全关联和密钥管理协议 ②安全关联(SA) ③…...
各开源协议一览
在 GitHub 上,开源项目通常会使用一些常见的开源协议来定义项目的使用、修改和分发规则。以下是目前 GitHub 上最常见的几种开源协议及其差异和示例说明: TL;DR 协议宽松程度是否强制开源专利保护适用场景MIT最宽松否无希望代码被广泛使用Apache 2.0宽松…...
解决python manage.py shell ModuleNotFoundError: No module named xxx
报错如下: python manage.py shellTraceback (most recent call last):File "/Users/z/Documents/project/c/manage.py", line 10, in <module>execute_from_command_line(sys.argv)File "/Users/z/.virtualenvs/c/lib/python3.12/site-packa…...
机器学习12-集成学习-案例
参考 【数据挖掘】基于XGBoost的垃圾短信分类与预测 【分类】使用XGBoost算法对信用卡交易进行诈骗预测 银行卡电信诈骗危险预测(LightGBM版本) 【数据挖掘】基于XGBoost的垃圾短信分类与预测 基于XGBoost的垃圾短信分类与预测 我分享了一个项目给你《【数据挖掘】基于XG…...
使用Ubuntu18恢复群晖nas硬盘数据外接usb
使用Ubuntu18恢复群晖nas硬盘数据外接usb 1. 接入硬盘2.使用Ubuntu183.查看nas硬盘信息3. 挂载nas3.1 挂载损坏nas硬盘(USB)3.2 挂载当前运行的nas 4. 拷贝数据分批传输 5. 新旧数据对比 Synology NAS 出现故障,DS DiskStation损坏,则可以使用计算机和 U…...
微服务系统记录
记录下曾经工作涉及到微服务的相关知识。 1. 架构设计与服务划分 关键内容 领域驱动设计(DDD): 利用领域模型和限界上下文(Bounded Context)拆分业务,明确服务边界。通过事件风暴(Event Storm…...
【数据库原理及安全实验】实验二 数据库的语句操作
目录 指导书原文 实操备注 指导书原文 【实验目的】 1) 掌握使用SQL语言进行数据操纵的方法。 【实验原理】 1) 面对三个关系表student,course,sc。利用SQL语句向表中插入数据(insert),然后对数据进行delete&…...
python 微信小程序支付、查询、退款使用wechatpy库
首先使用 wechatpy 库,执行以下命令进行安装 pip install wechatpy 1、 直连商户支付 import logging from django.http import JsonResponse from django.views.decorators.http import require_http_methods from wechatpy.pay import WeChatPay from wechatpy.…...
蓝桥杯备赛学习笔记:高频考点与真题预测(C++/Java/python版)
2025蓝桥杯备赛学习笔记 ——高频考点与真题预测 一、考察趋势分析 通过对第13-15届蓝桥杯真题的分析,可以发现题目主要围绕基础算法、数据结构、数学问题、字符串处理、编程语言基础展开,且近年逐渐增加动态规划、图论、贪心算法等较难题目。 1. 基…...
【BFT帝国】20250409更新PBFT总结
2411 2411 2411 Zhang G R, Pan F, Mao Y H, et al. Reaching Consensus in the Byzantine Empire: A Comprehensive Review of BFT Consensus Algorithms[J]. ACM COMPUTING SURVEYS, 2024,56(5).出版时间: MAY 2024 索引时间(可被引用): 240412 被引:…...
Linux-CentOS-7—— 配置静态IP地址
文章目录 CentOS-7——配置静态IP地址VMware workstation的三种网络模式配置静态IP地址1. 编辑虚拟网络2. 确定网络接口名称3. 切换到网卡所在的目录4. 编辑网卡配置文件5. 查看网卡文件信息6. 重启网络服务7. 测试能否通网8. 远程虚拟主机(可选) 其他补…...
Jupyter Lab 无法启动 Kernel 问题排查与解决总结
📄 Jupyter Lab 无法启动 Kernel 问题排查与解决总结 一、问题概述 🚨 现象描述: 用户通过浏览器访问远程服务器的 Jupyter Lab 页面(http://xx.xx.xx.xx:8891/lab)后,.ipynb 文件可以打开,但无…...
算法训练之位运算
♥♥♥~~~~~~欢迎光临知星小度博客空间~~~~~~♥♥♥ ♥♥♥零星地变得优秀~也能拼凑出星河~♥♥♥ ♥♥♥我们一起努力成为更好的自己~♥♥♥ ♥♥♥如果这一篇博客对你有帮助~别忘了点赞分享哦~♥♥♥ ♥♥♥如果有什么问题可以评论区留言或者私信我哦~♥♥♥ ✨✨✨✨✨✨ 个…...
linux入门三:Linux 编辑器
一、轻量级编辑器:快速上手的首选 1.1 Leafpad:极简主义的轻量之选 核心特点 轻量快速:体积小、启动快,资源占用极低,适合低配设备或快速编辑简单文件。 无复杂功能:仅支持基础文本编辑,界面…...
C++设计模式+异常处理
#include <iostream> #include <cstring> #include <cstdlib> #include <unistd.h> #include <sstream> #include <vector> #include <memory> #include <stdexcept> // 包含异常类using namespace std;// 该作业要求各位写一…...
HttpServletRequest是什么
HttpServletRequest 是 Java Servlet API 中的一个接口,表示 HTTP 请求对象。它封装了客户端(如浏览器)发送到服务器的请求信息,并提供了访问这些信息的方法。 1. 基本概念 作用: HttpServletRequest 提供了一种机制&…...
checkra1n越狱出现的USB error -10问题解决
使用checkra1n进行越狱是出现: 解决办法(使用命令行进行越狱): 1. cd /Applications/checkra1n.app/Contents/MacOS 2. ./checkra1n -cv 3. 先进入恢复模式 a .可使用爱思助手 b. 或者长按home,出现关机的滑条,同时按住home和电源键&#…...
golang-defer延迟机制
defer延迟机制 defer是什么 defer是go中一种延迟调用机制。 执行时机 defer后面的函数只有在当前函数执行完毕后才能执行。 执行顺序 将延迟的语句按defer的逆序进行执行,也就是说先被defer的语句最后被执行,最后被defer的语句,最先被执…...
【小沐学Web3D】three.js 加载三维模型(Angular)
文章目录 1、简介1.1 three.js1.2 angular.js 2、three.js Angular.js结语 1、简介 1.1 three.js Three.js 是一款 webGL(3D绘图标准)引擎,可以运行于所有支持 webGL 的浏览器。Three.js 封装了 webGL 底层的 API ,为我们提供了…...
