链接:http://noi.openjudge.cn/ch0406/1768/

描述
已知矩阵的大小定义为矩阵中所有元素的和。给定一个矩阵,你的任务是找到最大的非空(大小至少是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)。再后面的若干行中,依次(首先从左到右给出第一行的N个整数,再从左到右给出第二行的N个整数……)给出矩阵中的N2个整数,整数之间由空白字符分隔(空格或者空行)。已知矩阵中整数的范围都在[-127, 127]。
输出
输出最大子矩阵的大小。
样例输入
4
0 -2 -7 0 9 2 -6 2
-4 1 -4 1 -1

8 0 -2
样例输出
15

芒果君:第一次看到这道题,还是在贪心里,就特别懵逼,后来dalao教我用矩阵前缀和来写,画个图的话就很容易理解啦~

(a:元素,sum:从a(1,1)到a(i,j)所有值的和,就是前缀和。)

边读入边求前缀和(sum),用这个公式来求:①+②+③-④ 得出sum(5,3)=a(5,3)+sum(4,3)+sum(5,2)-sum(4,2);

好像有点递推思想呢?

然后四重循环暴力枚举所有子矩阵,找到最大值!

公式:①-②-③+④,枚举出(2,2)到(5,3)的矩阵大小t=sum(5,3)-sum(5,1)-sum(1,3)+sum(1,1),更新最大值。代码如下——

 #include<cstdio>
#include<algorithm>
using namespace std;
int ju[][],sum[][],n,i,j,k,l,ans;
int main()
{
scanf("%d",&n);
for(i=;i<=n;++i)
for(j=;j<=n;++j){
scanf("%d",&ju[i][j]);
sum[i][j]=ju[i][j]+sum[i-][j]+sum[i][j-]-sum[i-][j-];
}
for(i=;i<=n;++i)
for(j=;j<=n;++j)
for(k=;k<=i;++k)
for(l=;l<=j;++l)
ans=max(ans,sum[i][j]+sum[k-][l-]-sum[i][l-]-sum[k-][j]);
printf("%d",ans);
return ;
}

然后呢,这道题用DP做就是酱紫的(参考最大子序列和)~读入的时候求每一列的前缀和,再用三重循环把它处理成子矩阵(i,j限制行的范围,k是列)。抽象的看,是由线到面的转化。

 #include<cstdio>
#include<algorithm>
using namespace std;
int ju[][],f[],n,i,j,k,ans;
int main()
{
scanf("%d",&n);
for(i=;i<=n;++i)
for(j=;j<=n;++j){
scanf("%d",&ju[i][j]);
ju[i][j]+=ju[i-][j];
}
for(i=;i<=n;++i)
for(j=;j<i;++j){
for(k=;k<=n;++k)
f[k]=ju[i][k]-ju[j][k];
for(k=;k<=n;++k){
f[k]=max(f[k],f[k-]+f[k]);
ans=max(ans,f[k]);
}
}
printf("%d",ans);
return ;
}

各位dalao看懂了吗?没看懂也不关我的事~

(最后不负责任的博主在一片骂声中点下了保存修改)

noi openjudge 1768:最大子矩阵的更多相关文章

  1. NOI题库 1768最大子矩阵 题解

    NOI题库 1768最大子矩阵  题解     总时间限制: 1000ms 内存限制: 65536kB   描述   已知矩阵的大小定义为矩阵中所有元素的和.给定一个矩阵,你的任务是找到最大的非空(大 ...

  2. noi 1768 最大子矩阵

    题目链接:http://noi.openjudge.cn/ch0206/1768/ 可能是数据修改了吧,O(n6)过不了了. 主要是在求一个矩阵的和时,重复计算了很多次. 矩阵首先压缩一下.在输入的时 ...

  3. noi.openjudge 1.13.44

    http://noi.openjudge.cn/ch0113/44/ 总时间限制:  1000ms 内存限制:  65536kB 描述 将 p 进制 n 转换为 q 进制.p 和 q 的取值范围为[2 ...

  4. noi.openjudge 1.13.15

    http://noi.openjudge.cn/ch0113/15/ 总时间限制:  1000ms 内存限制:  65536kB 描述 输入一个长度为N的整数序列 (不多于128个整数),每个整数的范 ...

  5. noi.openjudge 1.12.6

    http://noi.openjudge.cn/ch0112/06/ 总时间限制:  2000ms 内存限制:  65536kB 描述 传说很遥远的藏宝楼顶层藏着诱人的宝藏.小明历尽千辛万苦终于找到传 ...

  6. noi.openjudge 2.6.162 Post Office

    http://noi.openjudge.cn/ch0206/162/ 总时间限制:  1000ms 内存限制:  65536kB 描述 There is a straight highway wit ...

  7. 1768:最大子矩阵(NOIP2014初赛最后一题)

    1768:最大子矩阵 总时间限制: 1000ms 内存限制: 65536kB 描述 已知矩阵的大小定义为矩阵中所有元素的和.给定一个矩阵,你的任务是找到最大的非空(大小至少是1 * 1)子矩阵. 比如 ...

  8. noi.openjudge——8465 马走日

    http://noi.openjudge.cn/ch0205/8465/ 查看 提交 统计 提问 总时间限制:  1000ms 内存限制:  1024kB 描述 马在中国象棋以日字形规则移动. 请编写 ...

  9. noi.openjudge——2971 抓住那头牛

    http://noi.openjudge.cn/ch0205/2971/ 总时间限制:  2000ms 内存限制:  65536kB 描述 农夫知道一头牛的位置,想要抓住它.农夫和牛都位于数轴上,农夫 ...

随机推荐

  1. apache pinot-docker-compose 运行试用

    apache pinot 是一个实时的OLAP 数据存储,同时包含了自己的查询语言,因为maven 构建花费时间较大 所以使用docker-compose 运行 docker-compose 文件   ...

  2. kafka中的offset概念

    在 Kafka 中无论是 producer 往 topic 中写数据, 还是 consumer 从 topic 中读数据, 都避免不了和 offset 打交道, 关于 offset 主要有以下几个概念 ...

  3. 某神奇的cf跳转插件

    // ==UserScript== // @name Codeforces快速跳转菜单 // @namespace http://tampermonkey.net/ // @version 2019. ...

  4. 【概率DP】$P2059$ 卡牌游戏

    链接 题目描述 N个人坐成一圈玩游戏.一开始我们把所有玩家按顺时针从1到N编号.首先第一回合是玩家1作为庄家.每个回合庄家都会随机(即按相等的概率)从卡牌堆里选择一张卡片,假设卡片上的数字为X,则庄家 ...

  5. uniapp 组件传参

    父组件 <v-sub @returnDate=returnDate :backGround=backGround></v-sub> import vSub from " ...

  6. Excel填坑[0]

    Excel填坑[0] 本着一天水一贴的原则(放p),我又来填坑了.今天做一个很简单的排队图,虽然不难,但因为手机显示问题折腾了半天.感觉做图做表格不仅仅是靠技术,更重要的是思维. 就是这张图,看起来平 ...

  7. Awesome Knowledge-Distillation

    Awesome Knowledge-Distillation 2019-11-26 19:02:16 Source: https://github.com/FLHonker/Awesome-Knowl ...

  8. jsch channel is not opened原因及解决

    潜在原因1:服务器sshd限制,可通过如下解决: 潜在原因2:服务器负载过高,超时.在连接处增加超时时间session.setTimeout(60000);默认情况下,socket的超时时间大约为21 ...

  9. Vscode 修改主题颜色

    首先向大家演示如何使用VSCode自带的颜色主题:依次点击左上角的文件-首选项-颜色主题,出现如下的主题选取界面.

  10. 003 docker安装nginx

    一:安装与运行nginx 1.查找镜像网站 https://c.163yun.com/hub#/m/home/ 2.pull 3.查看当前在运行的容器 docker ps 4.启动nginx 使用后台 ...