前缀和算法 -- [模版]二维前缀和

news2024/11/24 19:35:58

 个人主页:Lei宝啊 

愿所有美好如期而遇


 

本题链接

【模板】二维前缀和_牛客题霸_牛客网 

输入描述

n是行,m是列,q是查询次数,x1,y1,x2,y2是二维数组的下标。

输出描述

通过两对下标,计算这两对下标构成的这个子矩阵的和。

算法分析

算法一:暴力求解

直接遍历数组,我们考虑最坏情况就是q次查询都是从头遍历到尾,时间复杂度就是O(n*m*q),这绝对是超时的。

算法二:前缀和

我们不希望每次查询时都要遍历去计算和,所以我们就有了创建dp表并进行预处理。

预处理二维dp表

首先我们要明白dp表每一个位置代表的状态,也就是说,dp[i][j] 就代表着从 [1,1] 到 [i,j] 这个子矩阵的和, 同时,我们创建dp表时下标从1开始,也就是说,不仅仅是数组下标从1开始,为什么要从1开始?一个是题目的m和n就是大于等于1的,另一个原因在于使用dp表进行计算时防止越界。

我们先创建这样的数组(示例一): 

接下来就是创建dp表,并进行预处理,但是我们怎么填充dp表呢?暴力遍历吗?分析一下时间复杂度,dp表我们有m*n个元素需要填充,每个元素都代表着子矩阵的和,也就是需要遍历数组,所以整体的时间复杂度就是O(m*n*m*n), 这样的时间复杂度甚至不如直接暴力求解,我们需要其他方法。

小学的时候,我们计算过面积,计算一块面积有时候直接算并不好算,于是我们分割了图形,求每个部分图形的和。

同理,直接算矩阵和不好算,我们将他分割成A,B,C,D四块,dp[i][j]的值就是A + B + C + D,但是我们发现A好算,就是dp[i-1][j-1],B和C并不好算,但是A+B呢?A+C呢?

所以我们也就有了思路:

最终我们得到dp表:

 

使用dp表计算

现在我们有了[1,1]到任意一个下标这个子矩阵的和,现在我们要算任意两个下标构成的子矩阵的和,我们看图:

我们似乎仍然能像面积一样进行分割:

 

解题源码

#include <iostream>
#include <vector>
using namespace std;

int main() 
{
    
    //n行,m列,q次
    int n, m, q;
    cin >> n >> m >> q;

    //创建二维数组
    vector<vector<int>> vv(n+1,vector<int>(m+1, 0));
    for(int i=1; i<n+1; i++)
    {
        for(int j=1; j<m+1; j++)
        {
            cin >> vv[i][j];
        }
    }

    //创建dp表并填充
    vector<vector<long long>> dp(n+1,vector<long long>(m+1, 0));
    for(int i=1; i<n+1; i++)
    {
        for(int j=1; j<m+1; j++)
        {
            dp[i][j] = dp[i-1][j] +dp[i][j-1] - dp[i-1][j-1] + vv[i][j];
        }
    }

    while(q--)
    {
        int x1, y1, x2, y2;
        cin >> x1 >> y1 >> x2 >> y2;

        long long sum = dp[x2][y2] - dp[x1-1][y2] - dp[x2][y1-1] 
                                                          +dp[x1-1][y1-1];
        cout << sum << endl;
    }

}
// 64 位输出请用 printf("%lld")

 

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

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

相关文章

nginx+keepalived实现七层负载

目录 一、部署nginx01、nginx02 二、keepalived配置&#xff08;抢占模式、master- backup模式&#xff09; 三、测试 四、非抢占模式&#xff08;backup-backup模式&#xff09; nginx01 11.0.1.31nginx0211.0.1.32虚拟IP&#xff08;VIP&#xff09;11.0.1.30 一、部署ngin…

JDBC->SpringJDBC->Mybatis封装JDBC

一、JDBC介绍 Java数据库连接&#xff0c;&#xff08;Java Database Connectivity&#xff0c;简称JDBC&#xff09;是Java语言中用来规范客户端程序如何来访问数据库的应用程序接口&#xff0c;提供了诸如查询和更新数据库中数据的方法。JDBC也是Sun Microsystems的商标。我们…

WPF+Halcon 培训项目实战(8-9):WPF+Halcon初次开发

文章目录 前言相关链接项目专栏运行环境匹配图片WPF Halcon组件HSmartWindowControlWPF绑定读取图片运行代码运行结果 抖动问题解决运行结果 绘制矩形绘制图像会消失 绘制对象绑定事件拖动事件 前言 为了更好地去学习WPFHalcon&#xff0c;我决定去报个班学一下。原因无非是想…

数据结构——顺序栈与链式栈的实现

目录 一、概念 1、栈的定义 2、栈顶 3、栈底 二、接口 1、可写接口 1&#xff09;数据入栈 2&#xff09;数据出栈 3&#xff09;清空栈 2、只读接口 1&#xff09;获取栈顶数据 2&#xff09;获取栈元素个数 3&#xff09;栈的判空 三、栈的基本运算 四、顺序栈&…

【CISSP学习笔记】5. 安全架构和工程

该知识领域涉及如下考点&#xff0c;具体内容分布于如下各个子章节&#xff1a; 使用安全设计原理来研究、实施与管理工程过程理解安全模型的基本概念&#xff08;例如 Biba、Star Model、Bell-LaPadula 等模型&#xff09;基于系统安全要求选择控制措施理解信息系统 (IS) 的安…

智能对话意图分析服务接口

机器人聊天&#xff0c;智能助手&#xff0c;内容生成&#xff0c;智能办公&#xff0c;智能辅助&#xff0c;智能搜索 一、接口介绍 通过接收用户提出的问题、输入的图片和文档等需求&#xff0c;准确识别其对话意图&#xff0c;并触发相应的回复。同时&#xff0c;整合了AP…

ansible管理windows测试

一、环境介绍 Ansible管理主机&#xff1a; 系统: redhat7.6 Linux管理服务器需安装pywinrm插件 Windows客户端主机&#xff1a; 系统: Server2012R2 Windows机器需要安装或升级powershell4.0以上版本&#xff0c;Server2008R2默认的版本是2.0&#xff0c;因此必须升…

m1芯片电脑上的paragon15如何安装激活 m1芯片电脑上ntfs for mac如何安装

Paragon NTFS软件在M1芯片电脑上安装之后&#xff0c;最后一步会让我们“允许加载第三方内核扩展”&#xff0c;具体如下图所示。 图1&#xff1a;允许加载第三方内核扩展 按照图中提示“单击此处“&#xff0c;然后打开安全与隐私。接下来依次点击小锁标志进行解锁&#xff0c…

【零基础入门TypeScript】TypeScript - 概述

目录 什么是 TypeScript&#xff1f; TypeScript 的特点 TypeScript 和 ECMAScript 为什么使用 TypeScript&#xff1f; TypeScript 的组件 声明文件 JavaScript 是作为客户端语言引入的。Node.js 的发展也标志着 JavaScript 成为一种新兴的服务器端技术。然而&#xff0…

云原生十二问

一、什么是云原生&#xff1f; 云原生是在云计算环境中构建、部署和管理现代应用程序的软件方法。现代企业希望构建高度可扩展、灵活且具有弹性的应用程序&#xff0c;可以快速更新以满足客户需求。为此&#xff0c;他们使用现代工具和技术&#xff0c;这些工具和技术本质上支…

python 深度学习 记录遇到的报错问题11

本篇继python 深度学习 记录遇到的报错问题10-CSDN博客 六、ValueError: cannot convert float NaN to integer 报错&#xff1a; 原因&#xff1a;这个错误通常是因为在尝试将NaN值转换为整数时发生的。NaN表示“非数字”&#xff0c;它无法转换为整数。在 Python 中&#xf…

2023年度回顾:怿星科技的转型与创新

岁月不居&#xff0c;时节如流。随着2023年的落幕&#xff0c;怿星科技在这一年中不仅实现了自身的转型&#xff0c;还在技术创新、产品研发、行业合作和人才培养等方面取得了显著的成就。这一年&#xff0c;怿星科技正式完成了从服务型公司向产品型公司的战略转变&#xff0c;…

媒体捕捉-拍照

引言 在项目开发中&#xff0c;从媒体库中选择图片或使用相机拍摄图片是一个极为普遍的需求。通常&#xff0c;我们使用UIImagePickerController来实现单张图片选择或启动相机拍照。整个拍照过程由UIImagePickerController内部实现&#xff0c;无需我们关心细节&#xff0c;只…

让你的隧道代理HTTP使用更加顺畅高效

在数字世界的探险中&#xff0c;隧道代理HTTP是我们穿越网络限制的重要工具。但有时候&#xff0c;我们可能会遇到连接不稳定、速度慢等问题。如何让隧道代理HTTP使用更加顺畅高效&#xff1f;下面是一些建议和技巧。 一、选择合适的代理服务器 代理服务器的地理位置、性能和…

C#/.NET/.NET Core推荐学习书籍(23年12月更新)

前言 古人云&#xff1a;“书中自有黄金屋&#xff0c;书中自有颜如玉”&#xff0c;说明了书籍的重要性。作为程序员&#xff0c;我们需要不断学习以提升自己的核心竞争力。以下是一些优秀的C#/.NET/.NET Core相关学习书籍&#xff0c;值得.NET开发者们学习和专研。书籍已分类…

查看证书有效期的命令

后面的证书是我们当时创建证书的路径 cfssl-certinfo -cert /opt/etcd/certs/etcd.pem

服务雪崩简单的介绍

定义 服务雪崩效应是一种因“服务提供者的不可用”&#xff08;原因&#xff09;导致“服务调用者不可用”&#xff08;结果&#xff09;&#xff0c;并将不可用逐渐放大的现象。如下图所示&#xff1a; 上图中, A为服务提供者, B为A的服务调用者, C和D是B的服务调用者. 当A的…

精确率(Precision,P),召回率(Recall,R)以及F1值(F1-score,F1)

狗狗识别系统的例子&#xff1a; 假设我们有两个集合&#xff1a; 实际狗狗的集合&#xff08;实际真正是狗狗的图片&#xff09;&#xff1a;A我们识别为狗狗的集合&#xff08;我们认为是狗狗的图片&#xff09;&#xff1a;B 精确率&#xff08;Precision&#xff0c;P&am…

LeetCode刷题--- 第 N 个泰波那契数

个人主页&#xff1a;元清加油_【C】,【C语言】,【数据结构与算法】-CSDN博客 个人专栏 力扣递归算法题 http://t.csdnimg.cn/yUl2I 【C】 ​​​​​​http://t.csdnimg.cn/6AbpV 数据结构与算法 ​​​http://t.csdnimg.cn/hKh2l 前言&#xff1a;这个专栏主要讲述动…

【十三】【动态规划】1745. 分割回文串 IV、132. 分割回文串 II、516. 最长回文子序列,三道题目深度解析

动态规划 动态规划就像是解决问题的一种策略&#xff0c;它可以帮助我们更高效地找到问题的解决方案。这个策略的核心思想就是将问题分解为一系列的小问题&#xff0c;并将每个小问题的解保存起来。这样&#xff0c;当我们需要解决原始问题的时候&#xff0c;我们就可以直接利…