蓝桥杯---最大子阵

问题描述

给定一个n×m 的矩阵 A,求A 中的一个非空子矩阵,使这个子矩阵中的元素和最大。其中,A 的子矩阵指在 A 中行和列均连续的一部分。 
输入格式 
输入的第一行包含两个整数 n,m(1≤n,m≤50),分别表示矩阵 A 的行数和列数。 
接下来 n 行,每行 m 个整数,表示矩阵 A(−1000≤i,j≤1000)。 
输出格式 
输出一行,包含一个整数,表示 A 中最大子矩阵的元素和。 
样例输入 
3 3 
2 -4 1 
-1 2 1 
4 -2 2 
样例输出 
6

C语言代码

#include<stdio.h>
int main(){
    int n,m;
    int a[51][51];
    int max=-1000000000;
    scanf("%d %d",&n,&m);
    for(int i=0;i<n;i++){
        for(int j=0;j<m;j++){
            scanf("%d",&a[i][j]);
        }
    }
    for(int i=0;i<n;i++){
        for(int j=0;j<m;j++){
        for(int k=i;k<n;k++){
            for(int p=j;p<m;p++){
                int sum=0;
                for(int c=i;c<=k;c++){
                    for(int d=j;d<=p;d++){
                        
                            sum=sum+a[c][d];    
                        
                    }
                }
                if(max<sum){
                    max=sum;
                }
            }
        }
        
        }
    } 
    printf("%d",max);
    return 0;
}

 

posted @ 2018-03-10 15:17  柠檬不酸i  阅读(110)  评论(0编辑  收藏  举报