poj 1050 子矩阵

做过最大子段和之后再看这题,看到相当熟悉,

不同的是,一个是一维的而这一个是二维的;

郁闷的是做了N久,里面的好几步骤都写乱了

粗心大意不可取啊

#include<iostream>
//#include<fstream>
using namespace std;

int num[110][110];
int temp[110],dp[110];
int Max;

int main()
{
int N,k;
//ifstream cin("in.txt");
while(cin>>N)
{
for(int i=1;i<=N;i++)
{
for(int j=1;j<=N;j++)
cin>>num[i][j];
}

//二维压缩为一维
for(int i=1;i<=N;i++)
{
memset(temp,0,sizeof(temp));
for(int j=i;j<=N;j++)
{
for( k=1;k<=N;k++)
{
temp[k] = num[j][k] + temp[k];

if (temp[k] + dp[k-1] > 0)  //熟悉吧,求最大子段和,也可以分开些
dp[k] = temp[k] + dp[k-1];
else
dp[k] = 0;
if (Max < dp[k])
Max = dp[k];
}


}

}

cout<<Max<<endl;

}
}

原文地址:https://www.cnblogs.com/lfyy/p/2772166.html