又了解了一种新思维,达拉拉~~~~~~
我们都会算最大和连续子序列;
这道题是把多维数组压缩,暴力算;
因为maxs每次都是与sum比较得来,所以上次的最大和会保存到比maxs大的和产生时
#include <iostream>
#include <stdio.h>#include <string.h>
#define maxn 105
using namespace std;
int map[maxn][maxn];
int n,maxs = 0;
void find( int b)
{
int sum = 0;
for( int a = 1; a<=n; a++)
{
if(sum >= 0)
sum += map[b][a];
else if( sum < 0)
sum = map[b][a];
if(maxs < sum)
maxs = sum;
}
}
int main()
{
int t, i, j, k;
scanf("%d",&n);
memset(map,0,sizeof(map));
for( i = 1; i<= n; i++)
{
for(j = 1; j<= n; j++)
scanf("%d",&map[i][j]);
}
maxs = map[1][1];
for(i = 1; i<= n; i++)
{
find(i);
for( j = i+1; j<=n; j++)
{
for( k = 1; k<= n; k++)
map[i][k] += map[j][k];
find(i);
}
}
printf("%d\n",maxs);
return 0;
}