wlxsq的专栏通过本文主要向大家介绍了skin to the max,m.c the max李秀,ski to the max,mc the max,the max等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1081
/*
将维度合成一列
*/
#include<bits/stdc++.h>
using namespace std;
const int N=1050;
int dp[N][N]; // dp[i][j]表示从dp[1][j]~dp[i][j]的和
int a[N][N];
int t[N];
int ss,ee;
int MaxSum(int *a,int n)
{
int s;
int Max=0,sum=0;
for(int i=1;i<=n;i++){
if(sum>0){
sum+=a[i];
}else{
s=i;
sum=a[i];
}
if(sum>Max){
Max=sum;
ss=s;
ee=i;
}
}
return Max;
}
int main()
{
int n;
while(cin>>n){
memset(dp,0,sizeof(dp));
memset(t,0,sizeof(t));
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
cin>>a[i][j];
dp[i][j]=dp[i-1][j]+a[i][j];
}
}
int Max=0;
int x,y,S,T; // 开始行,宽度,开始结束位置
for(int i=1;i<=n;i++){ // 枚举行的起点
for(int j=1;j<=n-i+1;j++){ // 枚举宽度
for(int k=1;k<=n;k++){ // 枚举列,将二维整合成一维
t[k]=(dp[i+j-1][k]-dp[i-1][k]);
}
int tmp=MaxSum(t,n);
if(tmp>Max){
Max=tmp;
x=i;
y=j;
S=ss;
T=ee;
}
}
}
cout<<Max<<endl;
// for(int i=x;i<=x+y-1;i++){
// for(int j=S;j<=T;j++){
// cout<<a[i][j]<<' ';
// }
// cout<<endl;
// }
}
return 0;
}

