最大长方体问题

来源:互联网 发布:apache tomcat modjk 编辑:程序博客网 时间:2024/05/01 00:54
#include "iostream"#include "algorithm"#include "iomanip"#include "fstream"using namespace std;int a[51][51][51];int m, n, p;  //长方体第长、宽、高int max1(int c[], int len) //寻找一维数组最大连续子区间和{    int b = 0;    int sum = 0;    int i;    for(i=1; i<=len; i++)    {        if(b> 0)            b = b + c[i];        else            b = c[i];        if(b > sum)            sum = b;    }    return sum;}int max2(int c[][51], int leni, int lenj) //寻找二维数组最大连续子区间和{    int i, j, k;    int sum = 0;    int b[51];    int max = 0;    for(i=1; i<=leni; i++)    {        memset(b, 0, sizeof(b));        for(j=i; j<=leni; j++)        {            for(k=1; k<=lenj; k++)                b[k] += c[j][k];            max = max1(b, lenj);            if(max > sum)                sum = max;        }    }    return sum;} int max3(int leni, int lenj, int lenk)  //寻找三维数组最大连续子区间和{    int i, j, k, l;    int b[51][51];    int max = 0;    int sum = 0;    for(i=1; i<=leni; i++)    {        memset(b, 0, sizeof(b));        for(j=i; j<=leni; j++)        {            for(k=1; k<=lenj; k++)                for(l=1; l<=lenk; l++)                    b[k][l] += a[j][k][l];            max = max2(b, lenj, lenk);            if(max > sum)                sum = max;        }    }    return sum;}int main(){    ifstream fin("长方体.txt");    cout << "输入长方体长、宽、高:";    fin >> m >> n >> p;    cout << m << " " << n << " " << p;    cout << "\n输入小立方体中的数:\n";    int i, j, k;    for(i=1; i<=m; i++)    {        for(j=1; j<=n; j++)        {            for(k=1; k<=p; k++)            {                fin >> a[i][j][k];                cout << setw(3) << a[i][j][k] << " ";            }            cout << endl;        }    }    cout << "最大子长方体为:" << max3(m, n, p) << endl;    fin.close();    return 0;} 

这里写图片描述

0 0
原创粉丝点击