力扣精选算法100道——【模板】前缀和 (二维)

目录

🎈题目解析 

🎈算法原理

🎈实现代码


二维前缀和【模板】


🎈题目解析 

上一题我们讲述了一维的前缀和求法。

第一行三个参数,n是行数=3,m是列数=4,q=3代表查询次数

接下来就是n行m列的矩阵

剩下的q行 是查询的区间,我们依次输入x1,y1,  x2,  y2 


🎈算法原理

我们先想想如何计算这个正方形整个的区域和。

我们可以利用这种方法     A+B+C+D=(A+B)+(A+C)+D-A

使用两层循环计算前缀和,其中 dp[i][j] 表示矩阵中从 (1,1)(i,j) 的子矩阵的和。计算公式为 dp[i][j] = dp[i-1][j](A+B) + dp[i][j-1](A+C) + arr[i][j](D) - dp[i-1][j-1](A)

dp[i][j] = dp[i-1][j] + dp[i][j-1] + arr[i][j] - dp[i-1][j-1]


通过循环输入查询的矩形区域的左上角和右下角坐标 (x1, y1)(x2, y2)

输出查询区域的和,通过使用前缀和矩阵 dp,计算出区域和为 dp[x2][y2] - dp[x1-1][y2] - dp[x2][y1-1] + dp[x1-1][y1-1],这个公式通过前缀和的性质得出。

区域和为ret= dp[x2][y2] - dp[x1-1][y2] - dp[x2][y1-1] + dp[x1-1][y1-1]


🎈实现代码

#include <iostream>
#include<vector>
using namespace std;int main()
{int n=0,m=0,q=0;cin>>n>>m>>q;vector<vector<int>>arr(n+1,vector<int>(m+1))(n*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));//从(1,1)到(i,j)各个区间前缀和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]+arr[i][j]-dp[i-1][j-1];}}//使用前缀和矩阵int x1=0,y1=0,x2=0,y2=0;while(q--){//依次输入区间,然后计算该区域的前缀和cin>>x1>>y1>>x2>>y2;cout<<dp[x2][y2]-dp[x1-1][y2]-dp[x2][y1-1]+dp[x1-1][y1-1]<<endl;}return 0;
}

我要一直开心~

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

《Java 简易速速上手小册》第5章:Java 开发工具和框架(2024 最新版)

文章目录 5.1 Maven 和 Gradle - 构建你的堡垒5.1.1 基础知识5.1.2 重点案例&#xff1a;使用 Maven 构建一个简单的 Java 应用5.1.3 拓展案例 1&#xff1a;使用 Gradle 构建一个 Spring Boot 应用5.1.4 拓展案例 2&#xff1a;使用 Maven 管理多模块项目 5.2 Spring 框架 - 你…

【数据分享】2000~2018年青藏高原0.05°逐日积雪深度数据集

各位同学们好&#xff0c;今天和大伙儿分享的是2000~2018年青藏高原0.05逐日积雪深度数据集。如果大家有下载处理数据等方面的问题&#xff0c;可以添加我的微信交流~ 闫大江, 马宁, 张寅生. (2021). 青藏高原0.05逐日积雪深度数据集&#xff08;2000-2018&#xff09;. 国家青…

Java并发基础:PriorityBlockingQueue全面解析!

内容概要 PriorityBlockingQueue类能高效处理优先级任务&#xff0c;确保高优先级任务优先执行&#xff0c;它内部基于优先级堆实现&#xff0c;保证了元素的有序性&#xff0c;同时&#xff0c;作为BlockingQueue接口的实现&#xff0c;它提供了线程安全的队列操作&#xff0…

[缓存] 1. 缓存共性问题

1. 缓存的作用 为什么需要缓存呢&#xff1f;缓存主要解决两个问题&#xff0c;一个是提高应用程序的性能&#xff0c;降低请求响应的延时&#xff1b;一个是提高应用程序的并发性。 2. 缓存的分类 本地缓存&#xff0c;分布式缓存 3. 缓存数据分类 3.1 数据缓存 程序数据直接…

Linux_环境变量_命令行参数

一.环境变量 在Linux中自己写的程序必须要带路径才能运行&#xff0c;相对路径或是绝对路径&#xff0c;但是像ls pwd这样的程序&#xff0c;不带路径也能运行。当你想要运行一个程序时&#xff1a; 如果带有路径的话&#xff0c;则直接将对应路径的程序加载进内存&#xff0…

七天入门大模型 :提示词工程 Prompt Engineering,最全的总结来了!

文章目录 技术交流群用通俗易懂方式讲解系列引 言LLM 的超参配置Prompt Engineering指令主要内容少样本学习更加明确的提示善用分隔符思维链提示对输出格式的明确要求 最佳实践案例1. Agent场景&#xff1a;使用prompt实现agent create2. Agent场景&#xff1a;使用system mess…

腾讯云4核8G服务器3年600元?

腾讯云4核8G服务器3年600元&#xff1f;目前的价格是轻量应用服务器4核8G12M带宽一年446元、646元15个月&#xff0c;云服务器CVM标准型S5实例4核8G配置价格15个月1437.3元&#xff0c;5年6490.44元&#xff0c;标准型SA2服务器1444.8元一年&#xff0c;在txy.wiki可以查询详细…

thinkphp5.0提示不支持redis,not support: redis

安装PHP扩展 例如宝塔&#xff0c;其他环境请用命令行&#xff0c;安装 redis配置完成以后&#xff0c;修改php.ini把redis扩展打开即可&#xff0c;重启环境

英伟达市值超越谷歌!老黄隔空回应Altman的巨资筹款计划:没必要,真的没必要!

凭借算力上的霸主地位&#xff0c;英伟达正稳步成为科技领域的下一个巨头&#xff0c;在不久的15个月前&#xff0c;英伟达的市值还不足3000亿美元。然而&#xff0c;截至昨日&#xff0c;英伟达股价飙升使其市值达到了1.83万亿美元&#xff0c;超越了Alphabet&#xff08;谷歌…

解锁未来:探秘Zxing二维码技术的神奇世界

解锁未来&#xff1a;探秘Zxing二维码技术的神奇世界 1. 引言 在当今数字化和智能化的社会中&#xff0c;二维码技术已经成为人们生活中不可或缺的一部分。从商品购物、支付结算到健康码、门票核销&#xff0c;二维码无处不在&#xff0c;极大地方便了人们的生活和工作。而Zx…

Peter算法小课堂—区间模型(2)

上次咋们讲了前两个区间模型&#xff1a;1.最大不重叠区间数 2.不重叠区间最少分组数。今天我们就学习&#xff1a;最小区间覆盖问题、区间重叠最厚层数&#xff01; 最小区间覆盖 先看三道题 那么&#xff0c;第1题&#xff0c;它是浮点数的题&#xff0c;也就要求首尾相同。…

JavaScript 事件循环:Event Loop

&#x1f9d1;‍&#x1f393; 个人主页&#xff1a;《爱蹦跶的大A阿》 &#x1f525;当前正在更新专栏&#xff1a;《VUE》 、《JavaScript保姆级教程》、《krpano》、《krpano中文文档》 ​ ​ ✨ 前言 事件循环 是 web 开发中的一个核心概念&#xff0c;它是 JavaScript…