hdu1081To The Max

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)

Total Submission(s): 8992    Accepted Submission(s): 4359

Problem Description

Given a two-dimensional array of positive and negative integers, a sub-rectangle is any contiguous sub-array of size 1 x 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 x 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

Source

Greater New York 2001

最大连续子串和:

有串s,用一个临时变量t维护一个ans,若t>=0则加上s[i]可能会更好,于是有t+=s[i],

若t<0,则变成s[i]可能会更好,于是有t=s[i]

每次若大于ans,更新即可

最大子矩阵和:

有矩阵s,用一个临时数组a维护一个ans,每次a都记录s连续i行矩阵的和,

这样就可以当作最大连续子串处理,每次算出最大值更新ans,即可

#include<map>
#include<string>
#include<cstring>
#include<cstdio>
#include<cstdlib>
#include<cmath>
#include<queue>
#include<vector>
#include<iostream>
#include<algorithm>
#include<bitset>
#include<climits>
#include<list>
#include<iomanip>
#include<stack>
#include<set>
using namespace std;
int a[110],pic[110][110];
int n;
int sub()
{
	int ans=INT_MIN,t=0;
	for(int i=0;i<n;i++)
	{
		if(t>=0)
			t+=a[i];
		else
			t=a[i];
		ans=max(ans,t);
	}
	return ans;
}
int matrix()
{
	int ans=INT_MIN;
	for(int i=0;i<n;i++)
	{
		memset(a,0,sizeof(a));
		for(int j=i;j<n;j++)
		{
			for(int k=0;k<n;k++)
				a[k]+=pic[j][k];
			ans=max(ans,sub());
		}
	}
	return ans;
}
int main()
{
	while(cin>>n)
	{
		for(int i=0;i<n;i++)
			for(int j=0;j<n;j++)
				cin>>pic[i][j];
		cout<<matrix()<<endl;
	}
}
时间: 2024-10-26 22:08:04

hdu1081To The Max的相关文章

hdu-------1081To The Max

To The Max Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 7681    Accepted Submission(s): 3724 Problem Description Given a two-dimensional array of positive and negative integers, a sub-rectang

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: