zoukankan      html  css  js  c++  java
  • LETTers第五场最大子矩阵解题报告

    题目描述: 

       本题题意就是给出一个n*m矩阵,然后求一个x*y的子矩阵,并且此子矩阵元素和最大。

    题面建模:

        简单模拟。

        思路还是很简单的,我们设计一个sum[n][m],其中sum[i][j]表示以(1,1)为左上顶点,以(i,j)为右下顶点的矩阵的所有元素和。这样我们要求以(i,j)为右下顶点大小为x*y的子矩阵所有元素和就有以下公式:

    ans=sum[i][j]-sum[i-x][j]-sum[i][j-y]+sum[i-x][j-y]

    遍历所有这样的子矩阵就可以求出答案。

    解题要点:

        注意边界的处理。

    时空开销分析:

        空间复杂度:O(n^2)。

        时间复杂度:O(n^2)。

    特别说明:

        无。

    程序:

    #include <stdio.h>
    #include <string.h>
    int sum[1010][1010];
    int main()
    {
        int t,n,m,x,y,max,i,j;
        scanf("%d",&t);
        while(t--)
        {
            max=0;
            memset(sum,0,sizeof(sum));
            scanf("%d %d %d %d",&m,&n,&x,&y);
            for(i=1;i<=m;i++)
                for(j=1;j<=n;j++)
                {
                    scanf("%d",sum[i]+j);
                    sum[i][j]+=sum[i-1][j]+sum[i][j-1]-sum[i-1][j-1];
                }
            for(i=x;i<=m;i++)
                for(j=y;j<=n;j++)
                    max=max>sum[i][j]-sum[i-x][j]-sum[i][j-y]+sum[i-x][j-y]?max:sum[i][j]-sum[i-x][j]-sum[i][j-y]+sum[i-x][j-y];
            printf("%d\n",max);
        }
        return 1;
    }
  • 相关阅读:
    第一篇Scrum冲刺博客
    团队作业3--需求改进&系统设计
    团队作业2(追忆少年)—需求规格说明书
    JAVA作业—字符串操作
    团队作业1——团队展示&选题 (追忆少年)
    个人项目作业WC(JAVA)
    自我介绍+软工5问
    C语言I博客作业07
    C语言I博客作业06
    C语言I博客作业05
  • 原文地址:https://www.cnblogs.com/LETTers/p/2461006.html
Copyright © 2011-2022 走看看