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

“二维前缀和”算法原理及模板

在学习本篇内容前建议先学习一下“一维前缀和”

一维前缀和 算法https://blog.csdn.net/czt230610/article/details/148012923?fromshare=blogdetail&sharetype=blogdetail&sharerId=148012923&sharerefer=PC&sharesource=czt230610&sharefrom=from_link接下来我们就直接从题引入

如果一维的话,很容易想到创建“前缀和”数组进行相减,但到了二维,我们要在每一行、每一列都要创建一个“前缀和”数组吗?显然太麻烦了,我们用一下数学思维或许使这个问题更加简单化。所以本题的暴力解我们就不多说了。

根据我们的算法原理:创建前缀和数组并使用,我们要“更便利“地创建这个数组。

首先,这个数组的含义是不能变的,dp[i][j]记录的是从[1,1]到dp[i,j]的所有和(为什么下标从1开始在一维模板中有说明),现在我们求dp[i][j]

根据题意,就是把图中arr的ABCD中所有元素求和即可(D就是arr[i][j]),如果我们直接求A+B+C+D,发现还是很麻烦,我们可以采用,(A+C)+(A+B)+D-A的方式,换成代码就是dp[i][j-1]+dp[i-1][j]+arr[i][j]-dp[i-1][j-1],这就是前缀和数组的预处理。

接下来是使用

上图是arr数组,我们要求出[x1,y1]-[x2,y2]之间的和(图中的D),我们可以用A+B+C+D-(A+B)-(A+C)+A.即dp[x2,y2]-dp[x1-1,y2]-dp[x2,y1-1]+dp[x1-1,y1-1]。这里的坐标-1用一下3×3表格模拟即可得出原因。

现在我们可以写题解(模板)了

#include <iostream>using namespace std;
#include <vector>int main()
{//输入数据int n=0,m=0,q=0;cin>>n>>m>>q;vector<vector<int>> arr(n+1,vector<int>(m+1));for(int i=1;i<=n;i++)for(int j=1;j<=m;j++)cin>>arr[i][j];
//预处理前缀和数组vector<vector<long long>> dp(n+1,vector<long long>(m+1));for(int i=1;i<=n;i++)for(int j=1;j<=m;j++)dp[i][j]=dp[i-1][j]+dp[i][j-1]-dp[i-1][j-1]+arr[i][j];//使用int x1=0=,y1=0,x2=0,y2=0;while(q--){cin >>x1>>y1>>x2>>y2;cout<<dp[x2][y2]-dp[x2,y1-1]-dp[x1-1,y2]+dp[x1-1,y1-1]<<endl;}return 0;
}

http://www.xdnf.cn/news/7211.html

相关文章:

  • 知网高级检索不显示来源类别解决方法
  • 对称加密与非对称加密在 JWT 中的应用详解
  • C++模板进阶使用技巧
  • el-scrollbar 获取滚动条高度 并将滚动条保持在低端
  • mysql数据库故障排查方案
  • 批量处理 Office 文档 高画质提取图片、视频、音频素材助手
  • httpx[http2] 和 httpx 的核心区别及使用场景如下
  • C++ map multimap 容器:赋值、排序、大小与删除操作
  • 【深度学习】残差网络(ResNet)
  • 图书管理系统
  • 滑动窗口算法详解与C++实现
  • 【背包dp】小结
  • 20250518 黎曼在三维空间中总结的一维二维的规律,推广到高维度合适吗?有没有人提出反对意见
  • Power BI Desktop运算符和新建列
  • 职场方法论总结(3)-金字塔原理
  • Redis的持久化机制
  • 深入探索PointNet:点云处理的革命性算法
  • 【MySQL】02.数据库基础
  • 安装和升级到devExpress23.1.7
  • #Redis黑马点评#(七)实战篇完结
  • 2025 ISCC 练武赛Pwn-wp(含附件)
  • 知识图谱(KG)与大语言模型(LLM)
  • 《算法导论(第4版)》阅读笔记:p83-p85
  • buck变换器的simulink/matlab仿真和python参数设计
  • 互联网大厂Java面试:从Spring Boot到微服务架构的技术深挖
  • 进程概念及操作系统的知识点
  • 基于STM32的多传感器融合的设施农业小型搬运机器人避障控制系统设计
  • React方向:react的基本语法-数据渲染
  • 备战!全国青少年信息素养大赛图形化编程-省赛——求最小公倍数
  • 【CF】Day61——Codeforces Round 939 (Div. 2) CD (思维构造 | 思维构造 + dfs枚举)