To the Max

Description

Given a two-dimensional array of positive and negative integers, a sub-rectangle is any contiguous sub-array of size 1*1 or greater located within the whole array. The sum of a rectangle is the sum of all the elements in that rectangle. In this problem the sub-rectangle with the largest sum is referred to as the maximal sub-rectangle. 
As an example, the maximal sub-rectangle of the array:

0 -2 -7 0 
9 2 -6 2 
-4 1 -4 1 
-1 8 0 -2 
is in the lower left corner:

9 2 
-4 1 
-1 8 
and has a sum of 15.

Input

The input consists of an N * N array of integers. The input begins with a single positive integer N on a line by itself, indicating the size of the square two-dimensional array. This is followed by N^2 integers separated by whitespace (spaces and newlines). These are the N^2 integers of the array, presented in row-major order. That is, all numbers in the first row, left to right, then all numbers in the second row, left to right, etc. N may be as large as 100. The numbers in the array will be in the range [-127,127].

Output

Output the sum of the maximal sub-rectangle.

Sample Input

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

8  0 -2

Sample Output

15

最大字串和的升级对于数列A[1->n]   dp[i]=dp[i-1]+a[i]  dp[i-1]>0  ||  dp[i]=a[i]  dp[i-1]<=0;现在将矩阵建立与最大字串和相关联的模型。矩阵压缩。滚动数组。

用s[k]表示第K列,第I行到第J行的和,把和看成一个数列中的一个AI即可。就转化成了最大字串和的问题。


 1 #include"iostream"
 2 #include"cstdio"
 3 #include"cstring"
 4 using namespace std;
 5 const int ms=110;
 6 int n,ans;
 7 int matrix[ms][ms];
 8 int s[ms];
 9 int main()
10 {
11     int i,j,k,t;
12     while(scanf("%d",&n)!=EOF)
13     {
14         for(int i=1;i<=n;i++)
15             for(j=1;j<=n;j++)
16                 scanf("%d",&matrix[i][j]);
17         ans=-0x7fffffff;
18         for(i=1;i<=n;i++)   //从第I行出发的子矩阵
19         {
20             memset(s,0,sizeof(s));
21             for(j=i;j<=n;j++)   //到达第J行的子矩阵
22             {
23                 t=0;
24                 for(k=1;k<=n;k++)//包含第K列 最大矩阵
25                 {
26                     s[k]+=matrix[j][k];
27                     if(t<=0)
28                         t=s[k];
29                     else
30                         t+=s[k];
31                     if(t>ans)
32                         ans=t;
33
34                 }
35             }
36         }
37         printf("%d\n",ans);
38     }
39     return 0;
40 }


To the Max,布布扣,bubuko.com

时间: 2024-10-13 16:18:29

To the Max的相关文章

POJ3048 Max Factor

本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作. 本文作者:ljh2000作者博客:http://www.cnblogs.com/ljh2000-jump/转载请注明出处,侵权必究,保留最终解释权!   Description To improve the organization of his farm, Farmer John labels each of his N (1 <= N <= 5,000) cows with a distinct s

自然语言处理中CNN模型几种常见的Max Pooling操作

/* 版权声明:可以任意转载,转载时请标明文章原始出处和作者信息 .*/ author: 张俊林 CNN是目前自然语言处理中和RNN并驾齐驱的两种最常见的深度学习模型.图1展示了在NLP任务中使用CNN模型的典型网络结构.一般而言,输入的字或者词用Word Embedding的方式表达,这样本来一维的文本信息输入就转换成了二维的输入结构,假设输入X包含m个字符,而每个字符的Word Embedding的长度为d,那么输入就是m*d的二维向量. 图1 自然语言处理中CNN模型典型网络结构 这里可以

matlab max()

max()函数 (1)可以找出矩阵元素中每列的最大值 max(A) ,max(A,[],dim) ),带返回值的[C,I]=max(A).[C,I]=max(A,[],dim) (2)可以比较两个标量的大小 max(a1,a2) (3)可以表示矩阵元素与标量的比较 max(A,a) (4)可以比较两个同型矩阵的对应位置元素 max(A1,A2) 参考文献

5.7.2.2 min()和max()方法

Math对象还包含许多方法,用于辅助完成简单和复杂的数学计算. 其中,min()和max()方法用于确定一组数值中的最小值和最大值.这两个方法都可以接受任意多个数值参数,如下例子: var max = Math.max(3,54,32,16); alert(max);//54 var min = Math.min(3,54,32,16); alert(min);//3 对于3.54.32和16,Math.max()返回54,而Math.min()返回3.这两个方法经常用于避免多余的循环和在if语

Linux C语言编程基本原理与实践 笔记 gcc max.o hello.c

人类和计算机交流的一种方式. C语言适合做Linux嵌入式.小工具. MAC电脑是Unix内核. 二.Linux基本操作 #vi a.c新建文件 #rm a.c删除文件 i 当前光标前面插入 a当前光标后面插入 shift+a 行尾插入 shift+i 行首插入 o下一行插入 shift+o上一行插入 dd 删除光标所在行 三 Linux下第一个C程序 vim a.c #include <stdio.h> int main () { printf("hello word !\n&qu

linq to sql (Group By/Having/Count/Sum/Min/Max/Avg操作符) (转帖)

http://wenku.baidu.com/link?url=2RsCun4Mum1SLbh-LHYZpTmGFMiEukrWAoJGKGpkiHKHeafJcx2y-HVttNMb1BqJpNdwaOpCflaajFY6k36IoCH_D82bk2ccu468uzDRXvG 基于LINQ+to+Entity数据访问技术的应用研究 Group By/Having操作符 适用场景:分组数据,为我们查找数据缩小范围. 说明:分配并返回对传入参数进行分组操作后的可枚举对象.分组:延迟 1.简单形式:

非小米Max独享 看你手机能否升级MIUI8?

在昨天举行的小米夏季新品发布会上,除了小米Max 之外小米还带来了全新的MIUI 8,此次MIUI 8在系统UI.动画交互.功能等层面进行了显著改善,特别推出了系统级分身术.伪基站诈骗短信识别等贴心功能,开发版将适配小米2/2S/3/4/4C /4S/5/Max以及红米/红米Note/小米Note全系列机型,基本上除了最古老的机型都能进行升级,对于用户来说是一大福音. 机友精灵www.jiyw.com 由于小米自小米手机M1以来已推出小米.红米两大系列,两系列又包含多条产品线,共更新迭代众多产品

C# 条件表达式max=(a&gt;b)?a:b;含义

a?b:c 这个是条件表达式,表示如果a为真,则表达式值为b,如果a为假,则表达式值为c条件表达式具体说明如下条件语句: if(a>b) max=a; else max=b; 可用条件表达式写为 max=(a>b)?a:b; 执行该语句的语义是:如a>b为真,则把a赋予max,否则把b 赋予max.使用条件表达式时,还应注意以下几点:1) 条件运算符的运算优先级低于关系运算符和算术运算符,但高于赋值符.因此 max=(a>b)?a:b 可以去掉括号而写为 max=a>b?a:

HDU 1003 Max Sum

题目: Problem Description Given a sequence a[1],a[2],a[3]......a[n], your job is to calculate the max sum of a sub-sequence. For example, given (6,-1,5,4,-7), the max sum in this sequence is 6 + (-1) + 5 + 4 = 14. Input The first line of the input cont

Laravel 5.4 migrate报错:Syntax error or access violation: 1071 Specified key was too long; max key length is 767 bytes (SQL: alter table `users` add unique `us ers_email_unique`(`email`))

Laravel 5.4 migrate报错:Syntax error or access violation: 1071 Specified key was too long; max key length is 767 bytes (SQL: alter table `users` add unique `us     ers_email_unique`(`email`)) public function up() { Schema::create('users', function (Blu