您的位置:首页 > 其它

POJ-1050To the Max

2016-04-15 00:25 344 查看
[b]TotheMax[/b]

TimeLimit:1000/1000MS(Java/Others)MemoryLimit:32768/32768K(Java/Others)

Description

Givenatwo-dimensionalarrayofpositiveandnegativeintegers,asub-rectangleisanycontiguoussub-arrayofsize1*1orgreaterlocatedwithinthewholearray.Thesumofarectangleisthesumofalltheelementsinthatrectangle.Inthisproblemthesub-rectanglewiththelargestsumisreferredtoasthemaximalsub-rectangle.
Asanexample,themaximalsub-rectangleofthearray:

0-2-70
92-62
-41-41
-180-2
isinthelowerleftcorner:

92
-41
-18
andhasasumof15.
Input

TheinputconsistsofanN*Narrayofintegers.TheinputbeginswithasinglepositiveintegerNonalinebyitself,indicatingthesizeofthesquaretwo-dimensionalarray.ThisisfollowedbyN^2integersseparatedbywhitespace(spacesandnewlines).ThesearetheN^2integersofthearray,presentedinrow-majororder.Thatis,allnumbersinthefirstrow,lefttoright,thenallnumbersinthesecondrow,lefttoright,etc.Nmaybeaslargeas100.Thenumbersinthearraywillbeintherange[-127,127].
Output

Outputthesumofthemaximalsub-rectangle.
SampleInput

4
0-2-7092-62
-41-41-1

80-2

SampleOutput

15

总结
虽然做了dp有一段时间了,但感觉还是一脸懵逼,看到这道题时完全没有思路,然后又是各种翻博客,看了半天才明白应该用什么思路,或许我就是一个
见得多才做的了题的人吧,以前弄奥数也是,很少有自己一次性做出来的新题,我要总结过这些思路后才想到怎么做。总之,在这个题我也学到了许多,
如何将二维转化为一维,如何求最长子串(请原谅我忘记了o(╯□╰)o)。


#include<iostream>
#include<cstdio>
#include<cstring>
usingnamespacestd;

#defineinf0x3f3f3f3f;

intmat[105][105];
inttemp[105];
intn;

intmain()
{
intmax;
cin>>n;
for(inti=1;i<=n;i++){
for(intj=1;j<=n;j++){
scanf("%d",&mat[i][j]);
}
}
max=-inf;
for(inti=1;i<n;i++){
memset(temp,0,sizeof(temp));
for(intj=i;j<=n;j++){
intsum=0,max1=0;
for(intk=1;k<=n;k++){
temp[k]+=mat[j][k];
sum+=temp[k];
if(sum<0)sum=0;
if(sum>max1)max1=sum;
}
if(max<max1)max=max1;
}
}
cout<<max<<endl;
return0;
}



                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: