/*
二维化为一维来求最大子序列值
*/
#include<iostream>
#include<cstdio>
using namespace std;
int Arr[110][110] = { 0 },N=0,sum1=0,max1=0;
void dp(int n)
{
int a = 0;
sum1 += Arr[n][1];
for (a = 2; a <= N; a++)
{
if (sum1 < 0) sum1 = Arr[n][a];
else
sum1 += Arr[n][a];
if (max1 < sum1)
max1 = sum1;
}
sum1 = 0;
}
int main( )
{
int i = 0,j=0,m=0;
cin >> N;
for (i = 1; i <= N; i++)
{
for (j = 1; j <= N; j++)
cin >> Arr[i][j];
}
max1 = Arr[1][1];
for (i = 1; i <= N; i++)
{
dp(i);//对本行i进行扫描
for (j = i+1; j <= N; j++)//必须为下一行
{
for (m = 1; m <= N; m++)
{
Arr[i][m] += Arr[j][m];
}
dp(i);
}
}
cout << max1 << endl;
return 0;
}
poj 1050动态规划+最大子矩阵和+二维化为一维来求最大子串和值
最新推荐文章于 2019-12-03 21:20:47 发布