zoukankan      html  css  js  c++  java
  • 求一个二维数组的最大子矩阵(王伟光,曹锦锋)

    算法描述:本题可以使用穷举法,但是那样不容易实现以及效率不高,我们的想法是,将二维数组变成一维数组,再将此“一维数组”按照上次的做法既可求出最大子数组,

    怎么样将二维变成一维呢:例如我们做的是四行四列的数组,将每一行用一个sum来表示,则有sum[1],sum[2],sum[3],sum[4],sum[1]动态的代表此行的和,例如前两个数的和,再往后变成前三个数的和,每当求出一行的和时,同时也求出了以下三行的和,然后将sum数组看成一维数组进行比较求出最大值,然后动态的向后推进,直到遍历完,即可求出最大值

    程序:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    #include<stdio.h>
    int main()
    {
        int m,n,i,j,i1,z;
        int sum1,sum[4];
        int a[4][4];
        int max=0;
        printf("请输入数据 ");
        for(i=0;i<4;i++)
            for(j=0;j<4;j++)
              scanf("%d",&a[i][j]);
            for(m=0;m<4;m++)
            {
                for(i1=0;i1<4;i1++)
                {sum[i1]=0;}//初始化
                for(j=m;j<4;j++)
                {
                    for(i=0;i<4;i++)
                    {
                        sum[i]+=a[i][j];
                    }//求行的值变成一维数组
                    for(n=0;n<4;n++)
                    {
                        sum1=0;
                        for(z=n;z<4;z++)
                        {
                            sum1+=sum[z];
                            if(sum1>max)
                                max=sum1;
                        }
                    }
                }
            }
            printf("最大值为%d ",max);
      
        return 0;
    }

      运行结果:

        

     课下讨论截图:

  • 相关阅读:
    Codeforces Beta Round #92 (Div. 2 Only) B. Permutations 模拟
    POJ 3281 Dining 最大流 Dinic算法
    POJ 2441 Arrange the BUlls 状压DP
    URAL 1152 Faise Mirrors 状压DP 简单题
    URAL 1039 Anniversary Party 树形DP 水题
    URAL 1018 Binary Apple Tree 树形DP 好题 经典
    pytorch中的forward前向传播机制
    .data()与.detach()的区别
    Argparse模块
    pytorch代码调试工具
  • 原文地址:https://www.cnblogs.com/caojinfeng/p/3611523.html
Copyright © 2011-2022 走看看