最大子矩阵(HDU - 1559,前缀和)

矩阵前缀和应用1:最大和子矩阵 前缀和+动态规划 关于矩阵前缀和【矩阵前缀和:常数时间求一子矩阵的加和】 给一个m*n的矩阵,找到一个子矩阵使其里面的数字加和最大,输出这个最大值 首先想到暴力算法: 枚举矩阵行列,复杂度O(n4),然后对每个枚举的子矩阵,计算矩阵内的加和O(n2),总复杂度O(n6) 通过前缀和,可以把计算加和的时间变为O(1),总复杂度O(n4),还是有点大 优化:引入动态规划中的最大子区间问题 【类似的题目】 已知一个一维数... 阅读详情

一.题目链接:

HDU-1559

二.题目大意:

给出一个 m × n 的矩阵,和一个大小为 x × y 的子矩阵,求子矩阵的最大值为多少?

三.分析:

利用前缀和求出 顶点 到 每个点 矩阵的和,然后枚举子矩阵顶点的位置即可.

如图:

四.代码实现:

#include <set>
#include <map>
#include <ctime>
#include <queue>
#include <cmath>
#include <stack>
#include <vector>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <iostream>
#include <algorithm>
#define eps 1e-6
#define PI acos(-1.0)
#define ll long long int
using namespace std;

const int M = 1010;
int sum[M][M];

int main()
{
    int T;
    scanf("%d", &T);
    while(T--)
    {
        memset(sum, 0, sizeof(sum));
        int m, n, x, y;
        int data;
        scanf("%d %d %d %d", &m, &n, &x, &y);
        for(int i = 1; i <= m; ++i)
        {
            for(int j = 1; j <= n; ++j)
            {
                scanf("%d", &data);
                sum[i][j] = sum[i - 1][j] + sum[i][j - 1] - sum[i - 1][j - 1] + data;
            }
        }
        int ans = 0;
        for(int i = 1; i + x - 1 <= m; ++i)
        {
            for(int j = 1; j + y - 1 <= n; ++j)
            {
                ans = max(ans, sum[i + x - 1][j + y - 1] - sum[i + x - 1][j - 1] - sum[i - 1][j + y - 1] + sum[i - 1][j - 1]);
            }
        }
        printf("%d\n", ans);
    }
    return 0;
}

 

HDU1559 最大子矩阵和(二维前缀和模板) 二维前缀和可以实现一个矩形区域内的求和问题,而本题恰好就是要求一个矩阵内部的和的最大值,所以直接套用二维前缀和并在结尾进行最大值更新即可。 #include<pch.h> #include <iostream> #include <cstdio> #include <bits/stdc++.h> #include <queue> #i... 阅读详情

相关推荐

HDU 1559 最大子矩阵(二维前缀和 · DP,218 ms)

一、题目描述 Problem Description 给你一个m×n的整数矩阵,在上面找一个x×y的子矩阵,使子矩阵中所有元素的和最大。 Input 输入数据的第一行为一个正整数T,表示有T组测试数据。每一组测试数据的第一行为四个正整数m,n,x,y(0<m,n<1000 AND 0<x<=m AND 0<y<=n),表示给定的矩形有m行n列。接下来这个矩阵,有...

COFACTOR 396

最大子矩阵:前缀和 + 线性动态规划

那么它的子矩阵就是矩阵中的某一片矩阵型的区域,那所要求的“最大子矩阵”的自然是找到在所有子矩阵中,矩阵元素和最大的那个矩阵。第二种情况是将当前位置的元素加入到之前的子序列中,即从当前位置开始新的子序列。dp[i - 1] + nums[i - 1] 表示从当前位置向前延伸的子序列的和,即以 nums[i - 1] 结尾的子序列和加上当前位置的元素值。其实通过上面的例子,我们不难发现进行预处理后的前缀和数组,仍然可以表示原数组的元素,更方便的是对于求原数组圈定矩阵元素和,在处理后的数组中仅通过使用。

2301_76606232的博客 1266

1224:最大子矩阵 2020-12-02

1224:最大子矩阵 时间限制: 1000 ms 内存限制: 65536 KB【题目描述】 已知矩阵的大小定义为矩阵中所有元素的和。给定一个矩阵,你的任务是找到最大的非空(大小至少是1×1)子矩阵。 比如,如下4×4的矩阵 0 −2 −7 0 9 2 −6 2 −4 1 −4 1 −1 8 0 −2 的最大子矩阵是 9 2 −4 −1 1 8 这个子矩阵的大小是15。【输入】 输入是一个N×N的矩阵。输入的第一行给出N(0<N≤100)。再后面的若干行中,依次(首先从左到右给出第一行的...

lybc2019的博客 1176

最大子矩阵和 = 前缀和 + 最大子段和

Luogu P7741 简单来说这道题就是求一个 N×MN \times MN×M 的矩阵的最大子矩阵和。 (因为求的是黑色石板与白色石板的数量差,所以代表白色石板的“0”可以看作 -1,这样就将问题转化为了求最大子矩阵和) 思路: 首先,这个子矩阵可以是任意大小的,而且起始点也可以在任何地方,所以,要把最大子矩阵找出来,我们要考虑多种情况。 假定原始矩阵的行数为 MMM,那么对于子矩阵,它的行数可以是 1 到 MMM 的任何一个数,而且,对于一个 KKK 行(K≤MK \le MK≤M)的子矩阵,它的第一

ycw123__QAQ_233的博客 457

Sentence-BERT 语义相似度双塔模型

论文介绍 发表:2019,EMNLP 论文题目:《Sentence-BERT:sentence embeddings using siaese BERT-networks》 论文地址:https://arxiv.org/abs/1908.10084 Github:https://github.com/UKPLab/sentence-transformers 适用领域: 句向量生成 语义相似度计算 语义搜索 无监督任务(聚类) 1 概述 在20年之前的各种预训练模型中,比如bert,XLNet,Alb

weiyaner的博客 9193

STM32实战指南:TFTLCD液晶屏驱动与ILI9341应用解析

本文详细解析了STM32驱动TFTLCD液晶屏的实战技巧,重点介绍了ILI9341控制器的硬件连接、寄存器操作及性能优化方法。通过8080并行接口时序分析、GRAM操作优化和DMA传输应用,帮助开发者高效实现液晶屏驱动,适用于工业控制、智能家居等场景。

weixin_26873711的博客 232

多维度求解最大子矩阵和(前缀+压缩+DP)

求解此类问题要找规律,首先看一下维度为1时的该问题。 ①当维度为1时。 此问题变为求最大连续子段和。此时可以用动态规划来解决该问题。 动态规划的思路也很简单 步骤 1:令状态 dp[i] 表示以 A[i] 作为末尾的连续序列的最大和(这里是说 A[i] 必须作为连续序列的末尾)。 步骤 2:做如下考虑:因为 dp[i] 要求是必须以 A[i] 结尾的连续序列,那么只有两种情况: 这个最大和的连续序...

youcaishen的博客 400

SGM5860x高精度ADC驱动开发与SPI接口实战指南

本文详细介绍了SGM5860x高精度ADC芯片的驱动开发与SPI接口配置实战。内容涵盖芯片特性、SPI通信设置、寄存器映射、驱动初始化、数据采集处理、校准优化及调试技巧,帮助开发者快速掌握国产24位ADC的应用,提升工业测量项目的精度与稳定性。

vvv99的博客 718

最大子矩阵hdu1559(二维前缀和)

最大子矩阵hdu1559 Problem Description 给你一个m×n的整数矩阵,在上面找一个x×y的子矩阵,使子矩阵中所有元素的和最大。 Input 输入数据的第一行为一个正整数T,表示有T组测试数据。每一组测试数据的第一行为四个正整数m,n,x,y(0<m,n<1000 AND 0<x<=m AND 0<y<=n),表示给定的矩形有m行n列。接下...

做一只熊猫不好吗? 451

用Zotero+B站Kimi,我如何把一篇顶会论文快速做成组会PPT(含完整提示词)

本文介绍如何利用Zotero和Kimi快速将顶会论文转化为组会PPT,提升学术汇报效率。通过Zotero的文献管理插件和Kimi的AI提炼技术,实现从论文阅读到PPT生成的全流程自动化,帮助研究者在90分钟内完成高质量汇报准备。

weixin_30955617的博客 499

FPGA—ZYNQ_BD Block Design学习(一)

1.第一步:打开Vivado软件,创建或打开一个工程。2.第二步:在Block Design中添加arm核心,并将其配置为IP核。3.第三步:配置arm核心的外设信息,如DDR接口、时钟频率、UART接口等。4.第四步:完成Block Design中的模块互联,生成PL端的比特流。 5.第五步:导出PS端的硬件信息,包括arm IP核的外设、速度、引脚和地址等信息。1创建bd 需要有ddr以及uart和时钟配置外设io口,这里就是zynq的管脚规定好的,根据原理图用哪个个勾选哪一个。 对外设uart的配

m0_58129662的博客 1028

二维前缀和——HDU - 1559 最大子矩阵

给你一个m×n的整数矩阵,在上面找一个x×y的子矩阵,使子矩阵中所有元素的和最大。 Input 输入数据的第一行为一个正整数T,表示有T组测试数据。每一组测试数据的第一行为四个正整数m,n,x,y(0<m,n<1000 AND 0<x<=m AND 0<y<=n),表示给定的矩形有m行n列。接下来这个矩阵,有m行,每行有n个不大于1000的正整数。 Out...

weixin_44064434的博客 311

开源滑翔伞升降速度表:基于STM32与传感器融合的DIY飞行仪表

传感器融合是现代嵌入式系统与物联网设备中的核心技术,它通过整合多个传感器的数据,利用滤波与估计算法,获得比单一传感器更精确、更可靠的环境感知能力。其技术价值在于提升系统的鲁棒性、精度和上下文理解能力,广泛应用于无人机导航、可穿戴设备、工业监测及智能驾驶等领域。本文聚焦于一个具体的工程实践案例——开源多功能滑翔伞升降速度表(Open-Vario),该项目巧妙地运用了**卡尔曼滤波器**进行气压与GNSS数据的融合,以精确计算升降率,并基于**FreeRTOS**实时操作系统构建了一个稳定、可扩展的嵌入式平台,

weixin_33657398的博客 176

【动态规划+前缀和】HDU-1559 最大子矩阵

注解 1、dp[i],[j] 表示 以i,j为右下角,最左上方元素为左上角的矩形的元素和。(用到了前缀和的思想) 所以在输入某元素后,dp[i],[j] = dp[i],[j-1] + dp[i-1],[j] + dp[i],[j]。(其中后面这个dp[i],[j]其实指的是第(i,j)位置的元素) 2、在求出dp[i],[j]之后,要想求最大子矩阵,其实是求 dp[j],[k] - dp[j]...

zhanggirlzhangboy的博客 253

【人工智能】架构演进:基于本体论与 LLM Agent 的供应链备件决策闭环实践

本文探讨了如何将本体论(Ontology)与大语言模型(LLM)Agent结合,构建供应链备件管理的智能决策系统。针对LLM在垂直领域存在的幻觉和逻辑缺陷问题,提出通过本体论建立结构化知识框架,形成四层架构:知识建模、动态感知、深度分析和决策闭环。系统利用图数据库实例化领域本体,融合多源数据实现实时感知,结合图谱推理和时序预测进行确定性分析,最终通过工具调用完成决策执行。技术选型推荐Gemini 1.5 Pro、Neo4j和LangChain等工具,实现从自动化到智能化的升级。该架构为工业领域提供了可解释、

奶爸的编程之路,也就一周冷个三天 170

西南科技大学数字电子技术实验七(4行串行累加器设计及FPGA实现)FPGA部分

/在k=1时输入1,并在k=0时运算。//在k=1时输入0,并在k=0时运算。//在k=1时输入1,并在k=0时运算。//在k=1时输入0,并在k=0时运算。//在k=1时输入1,并在k=0时运算。//在k=1时输入1,并在k=0时运算。//在k=1时输入0,并在k=0时运算。//在k=1时输入0,并在k=0时运算。三、程序清单(每条语句必须包括注释或在开发窗口注释后截图)四、综合、管脚分配、生成输出文件、下载(所有步骤截图)五、仿真程序清单、波形(波形截图必做,截图!.k(k),//开关。

Welcome To My6n Blog 4332

【HDU】1559 最大子矩阵 (二维前缀和,动态规划)

动态规划之二维前缀和 题目 给你一个m×n的整数矩阵,在上面找一个x×y的子矩阵,使子矩阵中所有元素的和最大。 输入 输入数据的第一行为一个正整数T,表示有T组测试数据。每一组测试数据的第一行为四个正整数m,n,x,y(0<m,n<1000 AND 0<x<=m AND 0<y<=n),表示给定的矩形有m行n列。接下来这个矩阵,有m行,每行有n个不大于1000的...

A's World 681

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

前缀和----求最大子矩阵和

本文部分借鉴源于大佬的博客:http://www.cnblogs.com/mrclr/p/8423136.html%20 现在有一个问题,有一个一维数组,求它的最大区间和。 我们可以利用贪心的思想,先将这个数组前缀和处理,所以我们可以得到区间和为 sum[L—R] = sum[R] - sum[L-1];因此,我们可以一边枚举R一边去找最小值,取这个区间和去和答案判断...

weixin_30810583的博客 487

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

【HDU - 1559】最大子矩阵 (二维前缀和裸题)

题干: 给你一个m×n的整数矩阵,在上面找一个x×y的子矩阵,使子矩阵中所有元素的和最大。 Input 输入数据的第一行为一个正整数T,表示有T组测试数据。每一组测试数据的第一行为四个正整数m,n,x,y(0&lt;m,n&lt;1000 AND 0&lt;x&lt;=m AND 0&lt;y&lt;=n),表示给定的矩形有m行n列。接下来这个矩阵,有m行,每行有n个不大于1000的正整数。...

xuanweiace的博客 1226

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

ACM HDU 1559 最大子矩阵

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1559 这道题 挺好的,当时想出解法的时候已经比较迟了。还是平时看得少。 把行与列都进行压缩。ans[i][j]存储的是前面所有元素的和。比较的时候注意条件的限制。我个人认为题目中并没有讲清楚谁大谁小,所有都有可能。 但是这道题数据太水了!!!不管是第一个条件还是第二个条件单独放都可以A...

ddqb3235的博客 178

DP求一类最大子矩阵

HDU 最大子矩阵 1559  利用容斥原理求出(0,0)到(i,j)的矩阵里的值的和,类似一维的前缀和。 #include #include const int maxn=1001; int dp[maxn][maxn]; int main () { int

jxy859的专栏 673

hdu 1559(最大子矩阵)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1559 思路:感觉就是1081这题差不多,但就是加了一个限制条件。。。 View Code 1 #include 2 #include 3 const int N=1010; 4 using namespace std; 5 6 int map[N][N]; 7

几百个教授的专栏 366

构造识别所有活前缀的dfa_前缀和与差分

前缀和是一种极其优秀的线性结构,也是一种重要的思想,能极大地降低区间查询的时间复杂度。前缀和数组的下标一般从 开始。1. 一维前缀和1.1 原理问题描述:假设有一串长度为 的序列 ,给出 次询问,每次询问给出 两个数,求区间 的和。如果使用暴力解法,每次都遍历一遍给出的区间,计算出答案,这样时间复杂度会达到 ,极有可能会 TLE。使用前缀和来做的话,能将时间复杂度降到 ,极大地减少了时间...

weixin_39759989的博客 932

HDU 1559 最大子矩阵 (DP)

题目地址:HDU 1559 构造二维前缀和矩阵。即矩阵上的点a[i][j]表示左上方的点为(0,0),右下方的点为(i,j)的矩阵的和。然后枚举每个矩阵的左上方的点,由于矩阵的长和宽是固定的,那么这个矩阵实际上也已经固定了。此时这个矩阵的和用公式: sum=a[i+x-1][j+y-1]-a[i+x-1][j-1]-a[i-1][j+y-1]+a[i-1][j-1]; 取最大值就可以了。

scf0920 1385

HDU1559(二维前缀和模板 Java&C++)

HDU1559(二维前缀和模板) 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1559 Problem Description 给你一个m×n的整数矩阵,在上面找一个x×y的子矩阵,使子矩阵中所有元素的和最大。 Input 输入数据的第一行为一个正整数T,表示有T组测试数据。每一组测试数据的第一行为四个正整数m,n,x,y(0<m,n<1000 AND 0<x<=m AND 0<y<=n),表示给定的矩形有m行n列。接下来

马克菠萝包ଲ的博客 287
上一篇: Color the ball(HDU - 1556,前缀和)
下一篇: A/B(HDU - 1576,费马小定理 + 乘法逆元)
The___Flash
博客等级 码龄8年 79粉丝 223原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值