zoukankan      html  css  js  c++  java
  • 二维数组 子数组和的最大值

    黄冠和我(高晓林)的大作,应老师要求上传+.+ 讨论半天也没想出啥好点子,只得用穷举法了。

    算法:

    先写一个求矩阵子数组的和的函数quzd(),参数有四个 i.j.m.n。(i,j)代表矩阵左上角的坐标,(m,n) 代表矩阵右下角的坐标。然后定义x,y,

    for(x=i;x<=m;x++),for(y=j;y<=n;y++),sum=sum+a[x][y];。便把和求出来了。然后再把每个矩阵子数组求出来,分别是i,j的for循环嵌套,然后再用一个函数求m,n(i<=m<=行数,j<=n<=列数)。 把求到的i,j,m,n ,调用之前写的函数。

    #include <iostream>
    using namespace std;
    #define h 3
    #define p 5
    int quzd(int a[][p],int i,int j,int m,int n)
    {
        int sum,k,l;
        sum=0;
        for(k=i;k<=m;k++)
        {
            for(l=j;l<=n;l++)
            {
                sum=sum+a[k][l];
            }
        }
        return  sum;
    }
    int zdsz(int a[][p],int i,int j)
    {
        int m,n,max;
        int sum[h][p];
        for(m=0;m<h;m++)
        {
            for(n=0;n<p;n++)
            {
                sum[m][n]=0;
            }
        }
        for(m=i;m<h;m++)
        {
            for(n=j;n<p;n++)
            {
                sum[m][n]=quzd(a,i,j,m,n);
            }
        }
        max=a[i][j];
        for(m=i;m<h;m++)
        {
            for(n=j;n<p;n++)
            {
                if(max<sum[m][n])
                {
                    max=sum[m][n];
                }
            }
        }
        return max;
    }
    
    int main()
    {
        int i,j,max;
        int a[h][p]={
            -10,1 ,5 ,3 ,34,
            -3 ,25,-25,50,-34,
            -8,9 ,7 ,-31,-2
        };
        int b[h][p];
        for(i=0;i<h;i++)
        {
            for(j=0;j<p;j++)
            {
                b[i][j]=zdsz(a,i,j);
            }
        }
        max=b[0][0];
        for(i=0;i<h;i++)
        {
            for(j=0;j<p;j++)
            {
                if(max<b[i][j])
                    max=b[i][j];
            }
        }
        cout<<max<<endl;
        return 0;
    }

    测试用例:

    int a[3][5]={

    10, 1,2 ,3 ,34,

    1 ,-1,-3,-5,98,

    -8,9 , 7,-2,2 };

    最大:148

    int a[h][p]={

    10,1 ,2 ,3 ,34,

    1 ,23,-3,-5,-34,

    -8,9 ,7 ,-31,2 };

    最大:50

    int a[3][5]={

    10,1 ,-50 ,3 ,34,

    -3 ,25,25,50,-34,

    -8,9 ,7 ,-31,-2 };

    最大:100

    int a[3][5]={

    10,1 ,-50 ,3 ,34,

    -3 ,25,-25,50,-34,

    -8,9 ,7 ,-31,-2 };

    最大:53

    不会开辟动态的二维数组就在前面用了define,直接改行和列的值就行了...

  • 相关阅读:
    Http服务器实现文件上传与下载(二)
    Http服务器实现文件上传与下载(三)
    NHibernate VS IbatisNet
    5. Element-UI的基本使用
    4. Vue脚手架
    3. Vue单文件组件
    webpack中的加载器
    webpack
    02.模块化相关规范
    01.前端工程化的学习目标
  • 原文地址:https://www.cnblogs.com/gaoxiaolin/p/3612215.html
Copyright © 2011-2022 走看看