Vijos 1255 月饼盒 最大子矩阵

题意:链接

方法:最大子矩阵

解析:

做过了那么多最大子矩阵,这道题随便YY就出来了,但我有个想法啊,如果某个n*m的矩阵,有部分坏点,非坏点有权值,可正可负,则选出的无坏点子矩阵的最大和为多少?

貌似dp?不知道啊。。

先说这道题,因为坏点权值为0,可以预处理出sum[i,j]代表i,j为右下角,(1,1)为左上角的矩阵的权值和。

当然我们可以暴力枚举矩阵,不过这是4次方的过不了。

再观察发现n,m<=1000,所以我们可以选用算♂法②来搞这道题。

先预处理sum,以及le,ri,h。

然后枚举所有好点,计算出其最大子矩阵的四个顶点坐标,一个简单的容斥就随便A了。

代码:

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#define N 1010
using namespace std;
int n,m;
int map[N][N];
bool M[N][N];
int sum[N][N];
int le[N][N];
int ri[N][N];
int h[N][N];
void getsum()
{
    for(int i=1;i<=n;i++)
    {
        int s=0;
        for(int j=1;j<=m;j++)
        {
            s+=map[i][j];
            sum[i][j]=s+sum[i-1][j];
        }
    }
}
void init()
{
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=m;j++)
        {
            if(!M[i][j])
                le[i][j]=0;
            else le[i][j]=le[i][j-1]+1;
        }
        for(int j=m;j>=1;j--)
        {
            if(!M[i][j])
                ri[i][j]=0;
            else ri[i][j]=ri[i][j+1]+1;
        }
    }
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=m;j++)
        {
            if(M[i][j]&&M[i-1][j])
            {
                h[i][j]=h[i-1][j]+1;
                le[i][j]=min(le[i][j],le[i-1][j]);
                ri[i][j]=min(ri[i][j],ri[i-1][j]);
            }
        }
    }
}
int main()
{
    scanf("%d%d",&n,&m);
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=m;j++)
        {
            scanf("%d",&map[i][j]);
            M[i][j]=!map[i][j]?0:1;
        }
    }
    getsum();
    init();
    int ans=0;
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=m;j++)
        {
            if(M[i][j])
            {
                int ptx1,pty1,ptx2,pty2,ptx3,pty3,ptx4,pty4;
                ptx1=i,pty1=j-le[i][j];
                ptx2=i-h[i][j]-1,pty2=j-le[i][j];
                ptx3=i-h[i][j]-1,pty3=j+ri[i][j]-1;
                ptx4=i,pty4=j+ri[i][j]-1;
                ans=max(ans,sum[ptx4][pty4]-sum[ptx1][pty1]-sum[ptx3][pty3]+sum[ptx2][pty2]);
            }
        }
    }
    printf("%d\n",ans);
} 

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-29 08:06:40

Vijos 1255 月饼盒 最大子矩阵的相关文章

Vijos 1055 奶牛浴场 最大子矩阵 算♂法①

题意:链接 方法:最大子矩阵之算♂法① 解析: 首先谈到最大子矩阵,我们可能会想到之前做过的盖房子?,那道DP求解的题目. 然而这种题目当然有更高♂端的算法. 比如接下来要谈到的算法①. 我们先来观察数据范围,n,m<=30000,这下就玩完了,怎么dp? 一下子就D掉了你原来的算法,真是不留情面. 那么我们来介绍一种新的算法. 首先谈暴力,枚举各种坏点,但这种的复杂度呢?甚至可能达到6次方,所以怎么优化呢? 按照经验,这种坐标图排个序就能降下复杂度什么的. 于是有神犇介绍了s^2复杂度的算法,

关于仿网易新闻中详细页图文混排功能的实现

最近在了解关于新闻内容的图文混排的效果,网上有人开源一个仿网易新闻的代码,本文就是简单记录学习其详细页面显示的效果实现: 下载地址:https://github.com/dsxNiubility/SXNews 效果图: 其原理:通过网络请求获得相关的信息,再通过手机端进行拼HTML,然后在WebView进行展示,此处还对文章中的图片增加点击效果,可以保存到相册中:文章的样式已经存在项目中,直接去调用: 1:首先了解两个相关的实体对象,一个是新闻的主体内容,另外一个就是图片的相关信息实体: 1:主

【转】零基础学习iOS开发【2015-09-06 23:03】

原文链接:http://www.cnblogs.com/mjios/archive/2013/04/27/3046049.html#label5 本文目录 一.程序设计语言 二.是否需要计算机专业知识 三.是否要英文很好 四.开发工具 五.开发环境 六.Mac OS X的获取途径 七.调试设备 八.开发者证书 九.总结 在上一讲中,介绍了什么是iOS开发.说简单一点,iOS开发,就是开发运行在iPhone或者iPad上的软件.这么一说完,应该有很多人就会产生一些疑惑,比如学习iOS开发是不是一定

c语言章节13

本文目录 一.程序设计语言 二.是否需要计算机专业知识 三.是否要英文很好 四.开发工具 五.开发环境 六.Mac OS X的获取途径 七.调试设备 八.开发者证书 九.总结 在上一讲中,介绍了什么是iOS开发.说简单一点,iOS开发,就是开发运行在iPhone或者iPad上的软件.这么一说完,应该有很多人就会产生一些疑惑,比如学习iOS开发是不是一定要买iPhone?需不需要买苹果电脑呢?学软件开发是不是一定要计算机专业的?因此,在这讲中,我会为广大有意学习iOS开发的朋友们进行解惑,说明一下

HTML 修真录------&quot;深渊三君王&quot;

魔兽上映了,有多少看的,下面评论区举举手,发发言!本来首映要去看来着,虽然是一个伪粉丝,但赶赶潮流还是可以的,但由于小编有其他的事情就没看! 今天中午吃饭问了一位教学部的老师,他说:就算不是一个游戏玩家,看了也是很精彩的.首映那天,很多专业游戏玩家都去看了,就好像有志同道合的人再看一部电影似的!说的小编也挺想去看啦,改天把魔兽的电影票补上! 说完最新电影之后,博主再和大家聊聊HTML修真录那些事,故事有点长,记得看完哟!. "师傅,我经过昨天的修炼,已经对HTML 此门神功有了基础的了解,但是学

【零基础学习iOS开发】【01-前言】02-准备

一.程序设计语言 上一讲已经说到:要想开发一款软件,首先得学习一些对应的程序设计语言. 至于iOS开发,须要学习的语言主要有:C.C++.Objective-C. 回到顶部 二.是否须要计算机专业知识 可能非常多人有这种疑问:学习编程一定得是计算机专业的么?这个不一定.有非常多程序猿曾经都不是计算机专业的,我身边有非常多这种样例. 有的在大学里是学物流管理的.学外语的.学金 融的.等等.事实上我也不是计算机专业的.也有一些人是从其它行业转过来的,比方曾经是修空调的.剪发的.当老师的,等等,他们如

2016.3.14__CSS 盒模型_第四天

首先对于之前的拖更表示抱歉,因公派,前往上海,所以耽误了几天,以后会尽量按时更新. 今天课程主要介绍盒模型的基本概念,同时告诉大家,盒模型具体元素的构成.在最后面会介绍一下定位. 今日课程预览 CSS 盒模型 概述 首先大家看到的是什么? 有月饼和月饼盒,对么? 所以,我们今天的课程就叫做"一个月饼盒引发的深思". 大家首先看到的是什么? 是不是一个盒子,很像我们中秋节的时候包装月饼的月饼盒子,对么? 其中两个月饼盒子之间的距离就是咱们要介绍的–>margin(外边距). 而咱们

拼接HTML代码在UIWebVIew中显示

其原理:通过网络请求获得相关的信息,再通过手机端进行拼HTML,然后在WebView进行展示,此处还对文章中的图片增加点击效果,可以保存到相册中:文章的样式已经存在项目中,直接去调用: 1:首先了解两个相关的实体对象,一个是新闻的主体内容,另外一个就是图片的相关信息实体: 1:主体内容 .H文件 @interface SXDetailModel : NSObject /** 新闻标题 */ @PRoperty (nonatomic, copy) NSString *title; /** 新闻发布

iOS开发 01-前言 02准备

本文目录 一.程序设计语言 二.是否需要计算机专业知识 三.是否要英文很好 四.开发工具 五.开发环境 六.Mac OS X的获取途径 七.调试设备 八.开发者证书 九.总结 在上一讲中,介绍了什么是iOS开发.说简单一点,iOS开发,就是开发运行在iPhone或者iPad上的软件.这么一说完,应该有很多人就会产生一些疑惑,比如学习iOS开发是不是一定要买iPhone?需不需要买苹果电脑呢?学软件开发是不是一定要计算机专业的?因此,在这讲中,我会为广大有意学习iOS开发的朋友们进行解惑,说明一下