给一段数列,求连续数列 和的最大值,
此题是二维的,将 i行到 j行 相加,转换为一行了,就是一维的了
#include<stdio.h>
#include<iostream>
#include<string.h>
using namespace std;
int p[110][110],b[110];
int n;
int com(int *b) //算一维的 函数
{
int i,j,k,sum=0,max=-1;
for(i=0;i<n;i++)
{
sum+=b[i];
if(sum<0) sum=0;
max=max>sum?max:sum;
}
return max;
}
int main()
{
int i,j,k,sum,max=-1;
while(scanf("%d",&n)!=EOF){
memset(p,0,sizeof(p));
for(i=0;i<n;i++)
for(j=0;j<n;j++)
scanf("%d",&p[i][j]);
for(i=0;i<n;i++)
{
memset(b,0,sizeof(b));
for(j=i;j<n;j++)
{
for(k=0;k<n;k++)
{
b[k] += p[j][k]; //将i到j行 的数相加,转换为一维的
}
sum=com(b);
max=max>sum?max:sum;
}
}
printf("%d\n",max);
}
}