COJ 0483 800501求最大非空子矩阵

800501求最大非空子矩阵
难度级别:B; 运行时间限制:1000ms; 运行空间限制:51200KB; 代码长度限制:2000000B

试题描述

已知矩阵的大小定义为矩阵中所有元素的和。给定一个矩阵,你的任务是找到最大的非空(大小至少是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

其他说明

数据范围:题目描述中已经给出。
 

题解:然而以前用悬线法做过?(逃

写了个最大子线段

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cmath>
 4 #include<algorithm>
 5 #include<queue>
 6 #include<cstring>
 7 #define PAU putchar(‘ ‘)
 8 #define ENT putchar(‘\n‘)
 9 using namespace std;
10 const int maxn=100+10;
11 int n,a[maxn][maxn],dp[maxn];
12 int get(int a[],int n){
13     int mx=a[0],tmp=0;
14     for (int i=0;i<n;i++){
15         if(tmp>0)tmp+=a[i];else tmp=a[i];mx=max(mx,tmp);
16     }return mx;
17 }
18 inline int read(){
19     int x=0,sig=1;char ch=getchar();
20     for(;!isdigit(ch);ch=getchar())if(ch==‘-‘)sig=0;
21     for(;isdigit(ch);ch=getchar())x=10*x+ch-‘0‘;
22     return sig?x:-x;
23 }
24 inline void write(int x){
25     if(x==0){putchar(‘0‘);return;}if(x<0)putchar(‘-‘),x=-x;
26     int len=0,buf[15];while(x)buf[len++]=x%10,x/=10;
27     for(int i=len-1;i>=0;i--)putchar(buf[i]+‘0‘);return;
28 }
29 void init(){
30     n=read();
31     for(int i=0;i<n;i++)
32         for(int j=0;j<n;j++)
33             a[i][j]=read();
34     int res=a[0][0];
35     for(int i=0;i<n;i++){
36         memset(dp,0,sizeof(dp));
37         for(int j=i;j<n;j++){
38             for(int k=0;k<n;k++)dp[k]+=a[j][k];
39             res=max(res,get(dp,n));
40         }
41     }
42     write(res);
43     return;
44 }
45 void work(){
46     return;
47 }
48 void print(){
49     return;
50 }
51 int main(){init();work();print();return 0;}
时间: 2024-10-18 18:58:24

COJ 0483 800501求最大非空子矩阵的相关文章

求幂大法,矩阵快速幂,快速幂模板题--hdu4549

hdu-4549 求幂大法.矩阵快速幂.快速幂 题目 M斐波那契数列 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others)Total Submission(s): 6217 Accepted Submission(s): 1902 Problem Description M斐波那契数列F[n]是一种整数数列,它的定义如下: F[0] = a F[1] = b F[n] = F[n-1] *

求集合的非空子集中key的数量

Description soda has a set  with  integers . A set is called key set if the sum of integers in the set is an even number. He wants to know how many nonempty subsets of  are key set. Input There are multiple test cases. The first line of input contain

POJ1845 Sumdiv(求所有因数和+矩阵快速幂)

题目问$A^B$的所有因数和. 根据唯一分解定理将A进行因式分解可得:A = p1^a1 * p2^a2 * p3^a3 * pn^an.A^B=p1^(a1*B)*p2^(a2*B)*...*pn^(an*B);A^B的所有约数之和sum=[1+p1+p1^2+...+p1^(a1*B)]*[1+p2+p2^2+...+p2^(a2*B)]*[1+pn+pn^2+...+pn^(an*B)] 知道这个,问题就变成求出A的所有质因数pi以及个数n,然后$\prod(1+p_i+p_i^2+\cd

矩阵中求最大二维矩阵

1.求一个矩阵中最大的二维矩阵(元素和最大).如: 1 2 0 3 4 2 3 4 5 1 1 1 5 3 0 中最大的是: 4 5 5 3 要求:(1)写出算法;(2)分析时间复杂度; function struct($arr, $row, $col) { $sum=0; for ($i=0;$i<$row-1;$i++){ for ($j=0;$j<$col;$j++){ $sum1=$arr[$i][$j]+$arr[$i][$j+1]+$arr[$i+1][$j]+$arr[$i+1]

使用python求海森Hessian矩阵

考虑一个函数$y=f(\textbf{x}) (R^n\rightarrow R)$,y的Hessian矩阵定义如下: 考虑一个函数:$$f(x)=b^Tx+\frac{1}{2}x^{T}Ax\\其中b^T=[1,3,5], A在代码中可读$$ 求该函数在x = [0,0,0]处海森矩阵值的python代码如下: import torch # 定义函数 x = torch.tensor([0., 0, 0], requires_grad=True) b = torch.tensor([1.,

hud5451_求循环节加矩阵快速幂

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5451 题目描述: 对于,给出x和mod,求y向下取整后取余mod的值为多少? 找循环节解析链接:http://blog.csdn.net/ACdreamers/article/details/25616461 裸题链接:http://blog.csdn.net/chenzhenyu123456/article/details/48529039 1 #include <algorithm> 2 #i

COJ 0579 4020求次短路的长度

4020求次短路的长度 难度级别:C: 运行时间限制:1000ms: 运行空间限制:51200KB: 代码长度限制:2000000B 试题描述 在一个地图上共有N个路口(编号分别为1到N),R条道路(道路均可以双向通行).问1号路口到N号路口的次短路长度是多少?次短路指的是比最短路长度长的次短的路径.同一条边可以经过多次. 输入 第一行包括两个整数N.R,接下来的R行,每行三个数x,y和m,表示第x号路口到第y号路口的距离是m. 输出 一个数,表示次短路的长度. 输入示例 4 41 2 1002

29.求3x3的整数矩阵对角线元素之和

1 #include <stdio.h> 2 #include <stdlib.h> 3 4 int main() 5 { 6 int i,j,sum=0,a[3][3]; 7 for(i=0;i<3;i++) 8 { 9 for(j=0;j<3;j++) 10 scanf("%d",&a[i][j]); 11 } 12 for(i=0;i<3;i++) //计算sum的时候,不要忘了此句,忘了此句则是计算所有的和 13 sum = s

求最大全1矩阵板子

题目链接:http://www.51nod.com/Challenge/Problem.html#problemId=1157 贪心暴力 #include<iostream> #include<algorithm> using namespace std; #define maxn 1005 int a[maxn][maxn]; int h[maxn];//存该列往上有多少个1 int l[maxn],r[maxn]; int main() { int n,m; int ans=0