【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的正整数。
输出
对于每组数据,输出一个整数,表示子矩阵的最大和。
样例输入
1
4 5 2 2
3 361 649 676 588
992 762 156 993 169
662 34 638 89 543
525 165 254 809 280
样例输出
2474
题解
首先想到要用二维前缀和预处理这个矩形,dp[i][j]代表左上角为(1,1)右下角为(i,j)这个矩形的和。
那么怎么遍历这个矩形呢?我选择是从(x,y)这个地方开始遍历,一直遍历到右下角结束位置,寻找其中的最大值。
至于dp数组怎么来的呢?二维前缀和怎么求呢?这篇博客将会给你答案:
!!!->非常易懂的二维前缀和博客
AC代码:
#include <iostream>
#include <cstdio>
#define maxn 1005
using namespace std;
//@start: 2020-04-01 18:18:24
int mp[maxn][maxn];//保存矩形
int dp[maxn][maxn];//dp二维前缀和数组
//快速输入
inline void read(int &x){
int ch = getchar(); x = 0;
bool f = false;
while((ch < '0' || ch > '9') && ch != '-') ch = getchar();
if(ch == '-'){f = true; ch = getchar();}
while(ch >= '0' && ch <= '9'){x = x * 10 + ch - '0'; ch = getchar();}
if(f) x = -x;
}
int main()
{
int t,m,n,x,y;
read(t);
while(t--)
{
read(m),read(n),read(x),read(y);
for(int i=1;i<=m;i++){
for(int j=1;j<=n;j++){
read(mp[i][j]);
//预处理,二位前缀和
dp[i][j]=dp[i-1][j]+dp[i][j-1]-dp[i-1][j-1]+mp[i][j];
}
}
//遍历矩形
int x1,y1,tmp,mx=-99999;
for(int i=x;i<=m;i++){
for(int j=y;j<=n;j++){
x1=i-x+1;y1=j-y+1;
tmp=dp[i][j]-dp[i][y1-1]-dp[x1-1][j]+dp[x1-1][y1-1];
// cout<<i<<","<<j<<":"<<tmp<<endl;
if(tmp>mx)mx=tmp;
}
}
cout<<mx<<endl;
}
return 0;
}
【HDU】1559 最大子矩阵 (二维前缀和,动态规划)的更多相关文章
- openjudge1768 最大子矩阵[二维前缀和or递推|DP]
总时间限制: 1000ms 内存限制: 65536kB 描述 已知矩阵的大小定义为矩阵中所有元素的和.给定一个矩阵,你的任务是找到最大的非空(大小至少是1 * 1)子矩阵. 比如,如下4 * 4的 ...
- HDU 6336.Problem E. Matrix from Arrays-子矩阵求和+规律+二维前缀和 (2018 Multi-University Training Contest 4 1005)
6336.Problem E. Matrix from Arrays 不想解释了,直接官方题解: 队友写了博客,我是水的他的代码 ------>HDU 6336 子矩阵求和 至于为什么是4倍的, ...
- HDU - 6336 Problem E. Matrix from Arrays (规律+二维前缀和)
题意: for (int i = 0; ; ++i) { for (int j = 0; j <= i; ++j) { M[j][i - j] = A[cursor]; cursor = (cu ...
- HDU 1559 最大子矩阵 (DP)
题目地址:pid=1559">HDU 1559 构造二维前缀和矩阵.即矩阵上的点a[i][j]表示左上方的点为(0,0),右下方的点为(i,j)的矩阵的和.然后枚举每一个矩阵的左上方的 ...
- 2018 Multi-University Training Contest 4 Problem E. Matrix from Arrays 【打表+二维前缀和】
任意门:http://acm.hdu.edu.cn/showproblem.php?pid=6336 Problem E. Matrix from Arrays Time Limit: 4000/20 ...
- Gym 102091L Largest Allowed Area 【二分+二维前缀和】
<题目链接> 题目大意:给你一个由01组成的矩形,现在问你,该矩形中,最多只含一个1的正方形的边长最长是多少. 解题分析: 用二维前缀和维护一下矩形的01值,便于后面直接$O(1)$查询任 ...
- Memento Mori (二维前缀和 + 枚举剪枝)
枚举指的是枚举矩阵的上下界,然后根据p0, p1, p2的关系去找出另外的中间2个点.然后需要记忆化一些地方防止重复减少时间复杂度.这应该是最关键的一步优化时间,指的就是代码中to数组.然后就是子矩阵 ...
- HDU-6514 Monitor(二维前缀和+差分)
http://acm.hdu.edu.cn/showproblem.php?pid=6514 Problem Description Xiaoteng has a large area of land ...
- 洛谷P1719 最大加权矩形 (DP/二维前缀和)
题目描述也没啥好说的,就是给你个你n*n的矩形(带权),求其中最大权值的子矩阵. 首先比较好想的就是二维前缀和,n<=120,所以可以用暴力. 1 #include<bits/stdc++ ...
- COGS1752 [BOI2007]摩基亚Mokia(CDQ分治 + 二维前缀和 + 线段树)
题目这么说的: 摩尔瓦多的移动电话公司摩基亚(Mokia)设计出了一种新的用户定位系统.和其他的定位系统一样,它能够迅速回答任何形如“用户C的位置在哪?”的问题,精确到毫米.但其真正高科技之处在于,它 ...
随机推荐
- windows2003 的安装以及安装时遇到的问题
windows2003 的安装以及安装时遇到的问题 简介:Windows Server 2003是微软于2003年3月28日发布的基于Windows XP/NT5.1开发的服务器操作系统,并在同年4月 ...
- 【读书笔记】组合计数-Tilings-引言部分
Tilings-引言部分 目录 一些形式化定义 各种各样的Tilings例子 Example 9.1.1 Example 9.1.2 Example 9.1.3 Thurston and Lagari ...
- java多线程--7 线程协作 线程池
java多线程--7 线程协作 线程池 并发协作模型--生产者消费者模式 这是一个线程同步问题,生产者和消费者共享同一个资源,并且生产者和消费者之间互相依赖,互为条件. java提供了几个方法解决线程 ...
- C++类的构造函数、析构函数、拷贝构造函数、赋值函数和移动构造函数详细总结
目录 1. 五种函数介绍 2. 左值&右值怎么区分?怎么看? 3. 匿名对象的3种使用情况 4. 代码详细验证每个函数调用情况 4.1 测试 f_1 函数(函数形参测试 -- 值传递) 4.2 ...
- Python的函数和方法如何区分呢?
结论>>>:无论是函数还是方法都用def关键字来定义 方法:只要是自动传值都是方法.由谁来调用.会把自身传入 函数:有几个值就传几个值否则会报错 目录 一.详细介绍函数和方法 二.用 ...
- 安装KubeOperator并导入现有集群进行管理
安装KubeOperator并导入现有集群进行管理 介绍 KubeOperator 是一个开源的轻量级 Kubernetes 发行版,专注于帮助企业规划.部署和运营生产级别的 Kubernetes 集 ...
- 基于SpringBoot实现单元测试的多种情境/方法(二)
本文分享自天翼云开发者社区@<基于SpringBoot实现单元测试的多种情境/方法(二)>, 作者:才开始学技术的小白 1 Mock基础回顾 在上一篇分享中我们详细介绍了简单的.用moc ...
- LeeCode 91双周赛复盘
T1: 不同的平均值数目 思路:排序 + 双指针 + 哈希存储 public int distinctAverages(int[] nums) { Arrays.sort(nums); Set< ...
- PHP安全有帮助的一些函数
安全是编程非常重要的一个方面.在任何一种编程语言中,都提供了许多的函数或者模块来确保程序的安全性.在现代网站应用中,经常要获取来自世界各地用户的输入,但是,我们都知道"永远不能相信那些用户输 ...
- MIT6.824 Distributed-System(Lab1)-MapReduce
Lab address: http://nil.csail.mit.edu/6.824/2020/labs/lab-mr.html paper: MapReduce: Simplified Data ...