最大和

来源:互联网 发布:gtap数据库 编辑:程序博客网 时间:2024/04/30 00:05

                                                                                  最大和

时间限制:1000 ms  |  内存限制:65535 KB
难度:5
描述

给定一个由整数组成二维矩阵(r*c),现在需要找出它的一个子矩阵,使得这个子矩阵内的所有元素之和最大,并把这个子矩阵称为最大子矩阵。 
例子:
0 -2 -7 0 
9 2 -6 2 
-4 1 -4 1 
-1 8 0 -2 
其最大子矩阵为:

9 2 
-4 1 
-1 8 
其元素总和为15。 

输入
第一行输入一个整数n(0<n<=100),表示有n组测试数据;
每组测试数据:
第一行有两个的整数r,c(0<r,c<=100),r、c分别代表矩阵的行和列;
随后有r行,每行有c个整数;
输出
输出矩阵的最大子矩阵的元素之和。
样例输入
14 40 -2 -7 0 9 2 -6 2 -4 1 -4 1 -1 8 0 -2 
样例输出
15
思路:最大的矩阵在行与行之间,可能是第一行与第二行之间的子矩阵,可能是第一行与第2,3,4,5....n行之间的子矩阵,然后求每个矩阵的最大子矩阵和
#include<stdio.h>#include<string.h> int a[101][101]; int b[101][101]; int c[101]; int c1[101]; int we(int a1,int c1[])//求和最大的子串{int sum1=0;    int sum2=0;    for(int j=1; j<=a1; j++)    {        if(sum1>=0)//注意这个地方,只有当sum1>0的时候才加        {            sum1+=c1[j];        }       else        {            sum1=c1[j];        }        if(sum1>sum2)        {            sum2=sum1;        }        //printf("****%d ",sum1);    }    return sum2;}int main(){    int t;    scanf("%d",&t);    while(t--)    {        int n,m;   int sum;        int maxn=-1000000000;        scanf("%d%d",&n,&m);        int ni=-1000000000;        for(int i=1; i<=n; i++)        {            for(int j=1; j<=m; j++)            {                scanf("%d",&a[i][j]);                if(a[i][j]>ni)                {                    ni=a[i][j];                }            }        }        if(ni<0)//当最大的值《0的时候输出最大的负数,而不是0        {            printf("%d\n",ni);        }        else        {        for(int i=1; i<=n; i++)        {            memset(b,0,sizeof(b));            memset(c,0,sizeof(c));            for(int j=i; j<=n; j++)            {                for(int k=1; k<=m; k++)                {                    b[i][k]+=a[j][k];//相当于把多个行合并成一行,然后算这行的最大的子串和                    c[k]=b[i][k];                }                sum=we(m,c);                if(sum>maxn)                {                    maxn=sum;                }            }        }        printf("%d\n",maxn);        }    }}

0 0
原创粉丝点击