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,直接改行和列的值就行了...

  • 相关阅读:
    HTML5 meta最全使用手册
    CSS3实现开门动画
    angularJS学习资源最全汇总
    酷炫放大镜canvas实现
    完成评论功能
    从首页问答标题到问答详情页
    首页列表显示全部问答,完成问答详情页布局
    制作首页的显示列表。
    发布功能完成。
    登录之后更新导航
  • 原文地址:https://www.cnblogs.com/gaoxiaolin/p/3612215.html
Copyright © 2011-2022 走看看