您好,欢迎访问三七文档
当前位置:首页 > IT计算机/网络 > 其它相关文档 > 8601最大长方体问题
8601最大长方体问题时间限制:1000MS内存限制:1000K提交次数:0通过次数:0题型:编程题语言:无限制Description一个长,宽,高分别是m,n,p的长方体被分割成m*n*p个小立方体。每个小立方体内含一个整数。试着设计一个算法,计算所给长方体的最大子长方体。子长方体的大小由它内部所含所有整数之和确定。约定:当该长方体所有元素均为负数时,输出最大子长方体为0。Input第一行3个正整数m,n,p,其中1=m,n,p=50接下来的m*n行中每行p个整数,表示小立方体中的数。Output第一行中的数是计算出的最大子长方体的大小。SampleInput3330-1212211-2-2-1-1-33-2-2-31-23301321-3SampleOutput14Hint1,先编写一维的“最大字段和”的解法。2,基于“最大字段和”,编写二维的“最大子矩阵和”的解法。3,基于“最大子矩阵和”,编写三维的“最大子长方体和”的解法。ProviderzhengchanSourceCode#includeiostream#includecstringusingnamespacestd;constintN=55;intnum[N][N][N];//函数声明voidinput(intm,intn,intk);intcheck(intm,intn,intk);intmaxSum(inta[],intn);intmaxSum2(inta[N][N],intm,intn);intmaxSum3(inta[N][N][N],intm,intn,intk);intmain(){intm,n,k;cinmnk;if(m=1&&m=50&&n=1&&n=50&&k=1&&k=50){input(m,n,k);intsum=maxSum3(num,m,n,k);if(check(m,n,k)==1)coutsum;elsecout0;}return0;}voidinput(intm,intn,intk){intflag=0;//检测是否全为负数inti,j,l;for(i=0;im;i++)for(j=0;jn;j++)for(l=0;lk;l++){cinnum[i][j][l];if(num[i][j][l]=0)flag=1;}}intcheck(intm,intn,intk){intflag=0;//检测是否全为负数inti,j,l;for(i=0;im;i++)for(j=0;jn;j++)for(l=0;lk;l++){if(num[i][j][l]=0)flag=1;}returnflag;}intmaxSum(inta[],intn){intsum=a[0],b=0;for(inti=0;in;i++){if(b0)b+=a[i];elseb=a[i];if(sumb)sum=b;}returnsum;}intmaxSum2(inta[N][N],intm,intn){intsum=a[0][0];intb[N],i,j,k;for(i=0;im;i++){memset(b,0,sizeof(b));for(j=i;jm;j++){for(k=0;kn;k++)b[k]+=a[j][k];intmax=maxSum(b,n);if(maxsum)sum=max;}}returnsum;}intmaxSum3(inta[N][N][N],intm,intn,intk){intb[N][N];inti,j,l;intsum=a[0][0][0],max=0;for(i=0;im;i++){memset(b,0,sizeof(b));for(j=i;jm;j++){for(l=0;ln;l++)for(intt=0;tk;t++)b[l][t]+=a[j][l][t];max=maxSum2(b,n,k);if(maxsum)sum=max;}}returnsum;}
本文标题:8601最大长方体问题
链接地址:https://www.777doc.com/doc-6149144 .html