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;
    }
  • 相关阅读:
    hdu 1520(简单树形dp)
    hdu 1561(树形dp)
    hdu 2809(状压dp)
    hdu 2196(求树上每个节点到树上其他节点的最远距离)
    hdu 4003(树形dp)
    hdu 3899(树形dp)
    hdu 4714(树形dp)
    hdu 3905(dp)
    Linux mariadb(Mysql)的主从复制架构
    面向对象静态变量代码题
  • 原文地址:https://www.cnblogs.com/LETTers/p/2461006.html
Copyright © 2011-2022 走看看