首页 > 其他分享 >luogu P1719 最大加权矩形

luogu P1719 最大加权矩形

时间:2024-11-16 20:18:58浏览次数:1  
标签:加权 P1719 int luogu x1 矩阵 max 矩形

最大加权矩形

题目描述

为了更好的备战 NOIP2013,电脑组的几个女孩子 LYQ,ZSC,ZHQ 认为,我们不光需要机房,我们还需要运动,于是就决定找校长申请一块电脑组的课余运动场地,听说她们都是电脑组的高手,校长没有马上答应他们,而是先给她们出了一道数学题,并且告诉她们:你们能获得的运动场地的面积就是你们能找到的这个最大的数字。

校长先给他们一个 \(n\times n\) 矩阵。要求矩阵中最大加权矩形,即矩阵的每一个元素都有一权值,权值定义在整数集上。从中找一矩形,矩形大小无限制,是其中包含的所有元素的和最大 。矩阵的每个元素属于 \([-127,127]\) ,例如

 0 –2 –7  0 
 9  2 –6  2
-4  1 –4  1 
-1  8  0 –2

在左下角:

9  2
-4  1
-1  8

和为 \(15\)。

几个女孩子有点犯难了,于是就找到了电脑组精打细算的 HZH,TZY 小朋友帮忙计算,但是遗憾的是他们的答案都不一样,涉及土地的事情我们可不能含糊,你能帮忙计算出校长所给的矩形中加权和最大的矩形吗?

输入格式

第一行:\(n\),接下来是 \(n\) 行 \(n\) 列的矩阵。

输出格式

最大矩形(子矩阵)的和。

样例

4
0 -2 -7 0
 9 2 -6 2
-4 1 -4  1 
-1 8  0 -2
15

提示

\(1 \leq n\le 120\)

思路

数据不大,可以直接用前缀和暴力做出来

前缀和

将\(a[i][j]\)想象成一个方格,而不是一个点,i为第几行j为第几列
下面这张图则是求紫色斜线部分数据之和的图解
\(sum = s[x2][y2] - s[x2][y1 - 1] - s[x1 -1][y2] + s[x1 - 1][y1 - 1]\)

代码实现

#include <iostream>

int s[130][130];
using namespace std;

int main()
{
    int n; cin >> n;
    for(int i = 1; i <= n; i++)
    {
        for(int j = 1; j <= n; j++)
        {
            int num; cin >> num;
            s[i][j] = s[i - 1][j] + s[i][j - 1] - s[i - 1][j - 1] + num;
        }
    }
    int max = 0;
    for(int x1 = 1; x1 <= n; x1++)
    {
        for(int y1 = 1; y1 <= n; y1++)
        {
            for(int x2 = x1; x2 <= n; x2++)
            {
                for(int y2 = y1; y2 <= n; y2++)
                {
                    int su = s[x2][y2] - s[x1 - 1][y2] - s[x2][y1 - 1] + s[x1 - 1][y1 - 1];
                    max = su > max ? su : max;
                }
            }
        }
    }
    cout << max;
}

标签:加权,P1719,int,luogu,x1,矩阵,max,矩形
From: https://www.cnblogs.com/PeachyGalaxy/p/18549768/1116p

相关文章

  • 最大加权矩形
    最大加权矩形题目描述为了更好的备战NOIP2013,电脑组的几个女孩子LYQ,ZSC,ZHQ认为,我们不光需要机房,我们还需要运动,于是就决定找校长申请一块电脑组的课余运动场地,听说她们都是电脑组的高手,校长没有马上答应他们,而是先给她们出了一道数学题,并且告诉她们:你们能获得的运动场地的......
  • luogu P3853 路标设置
    [TJOI2007]路标设置题目背景B市和T市之间有一条长长的高速公路,这条公路的某些地方设有路标,但是大家都感觉路标设得太少了,相邻两个路标之间往往隔着相当长的一段距离。为了便于研究这个问题,我们把公路上相邻路标的最大距离定义为该公路的“空旷指数”。题目描述现在政府决......
  • 每日一题:https://www.luogu.com.cn/problem/P2249
    includeusingnamespacestd;intmain(){intp,sum;cin>>p>>sum;intarr[p];for(inti=0;i<p;i++){cin>>arr[i];}for(inti=1;i<=sum;i++){intmubiao;intmin=0;intmax=p-1;cin>>mubiao;for(;......
  • 每日一题 :https://www.luogu.com.cn/problem/P2249
    includeusingnamespacestd;intmain(){intp,sum;cin>>p>>sum;intarr[p];for(inti=0;i<p;i++){cin>>arr[i];}for(inti=1;i<=sum;i++){intmubiao;intmin=0;intmax=p-1;cin>>mubiao;for(;;){if(arr[0]mubiao){printf(......
  • LeetCode 836[矩形重叠]
    题目链接LeetCode836[矩形重叠]详情实例提示题解思路无重叠的四种情况:第二个矩形的右边边如果在第一个矩形的左边边的左边或重叠第二个矩形的左边边如果在第一个矩形的右边边的右边或重叠第二个矩形的上边边如果在第一个矩形的下边边的下边或重叠第二个矩形的下......
  • [luoguP2573/SCOI2012]滑雪
    题意给定一个有\(n\)个景点和\(m\)条边的无向图,景点有高度\(h_i\)。从景点\(i\)到\(j\)的移动仅当\(h_i\geqh_j\)且有边\((i,j)\)。从景点\(1\)出发,使用最短距离访问最多景点,且可使用回溯道具回到上一个点。求最多景点数和最短距离。sol如果本题无高度限制,那......
  • luogu P1873 砍树
    题目描述伐木工人Mirko需要砍M米长的木材。对Mirko来说这是很简单的工作,因为他有一个漂亮的新伐木机,可以如野火一般砍伐森林。不过,Mirko只被允许砍伐一排树。Mirko的伐木机工作流程如下:Mirko设置一个高度参数H(米),伐木机升起一个巨大的锯片到高度H,并锯掉所有树比H高的......
  • Luogu
    Luogu比赛记录【LGR-206-Div.3】洛谷基础赛#17&Diligent-OIRound1P11274「Diligent-OIR1D」DlgtTemplate周日被同机房大佬叫去写的因为看着很dp,所以往dp想。发现从前向后dp很神秘,后效性很大。于是唐了15min想到倒序dp。设\(f_{i,j}\)表示\([i,n]\)中选出......
  • 85. 最大矩形
    题目链接解题思路暴力怎么做?我们可以枚举,矩阵的底,必须是第0行,求一个最大值,矩阵的底,必须是第1行,求一个最大值,把所有的都得到,然后最大的那个,就是结果。依次类推,所有结果的最大值,就是全局最优解举个例子,假设矩阵[ [1,0,1,0,0], [1,0,1,1,1], [1,1,1,1,......
  • 84. 柱状图中最大的矩形
    题目链接解题思路:题目乍一看没有思路,那我们来想一想如果暴力求解怎么办。最大的矩形,他总有一个高(竖着的),然后有一个宽(横着的),那我们就暴力求解每一个高,也就是每一个下标i,对应的heights[i],最大的宽是多少,然后求出所有的解后,最优的便是结果。怎么求解以heights[i]为高,最大......