8601 最大长方体问题
时间限制:1000MS 内存限制:1000K 提交次数:0 通过次数:0
语言: not limited
描述
一个长,宽,高分别是m,n,p的长方体被分割成m*n*p个小立方体。每个小立方体内含一个整数。试着设计一个算法,计算所给长方体的最大子长方体。子长方体的大小由它内部所含所有整数之和确定。 约定:当该长方体所有元素均为负数时,输出最大子长方体为0。
输入格式
第一行3个正整数m,n,p,其中 1<=m,n,p<=50 接下来的m*n行中每行p个整数,表示小立方体中的数。
输出格式
第一行中的数是计算出的最大子长方体的大小。
输入样例
3 3 3 0 -1 2 1 2 2 1 1 -2 -2 -1 -1 -3 3 -2 -2 -3 1 -2 3 3 0 1 3 2 1 -3
输出样例
14
21
Hint
1,先编写一维的“最大字段和”的解法。
2,基于“最大字段和”,编写二维的“最大子矩阵和”的解法。
3,基于“最大子矩阵和”,编写三维的“最大子长方体和”的解法。
22
-------------------------------------------------------------------------
8601最大长方体问题(动态规划)
#include<iostream>
usingnamespacestd;
intMaxSum(intn,int*a)
{
intsum=0;
intb=0,i;
for(i=1;i<=n;i++){
if(b>0)b+=a[i];
elseb=a[i];
if(b>sum)sum=b;
}
returnsum;
}
intMaxSum2(intm,intn,int**a)
{
intsum=0,i,j,k;
int*b=newint[n+1];
for(i=1;i<=m;i++){
for(k=1;k<=n;k++)b[k]=0;
for(j=i;j<=m;j++){
for(k=1;k<=n;k++)b[k]+=a[j][k];
intmax=MaxSum(n,b);
if(max>sum)sum=max;
}
}
returnsum;
}
intMaxSum3(intm,intn,intp,int***a)
{
intsum=0,i,j,k,l;
int**c=newint*[n+1];
for(i=1;i<=n;i++)
c[i]=newint[p+1];
for(i=1;i<=m;i++){
for(j=1;j<=n;j++)
for(k=1;k<=p;k++)
c[j][k]=0;
for(l=i;l<=m;l++){
for(j=1;j<=n;j++)
for(k=1;k<=p;k++)
c[j][k]+=a[l][j][k];
intmax=MaxSum2(n,p,c);
if(max>sum)sum=max;
}
}
returnsum;
}
intmain()
{
intsum,m,n,p,i,j,k,***a;
scanf("%d%d%d",&m,&n,&p);
a=(int***)malloc((m+1)*sizeof(int**));
for(i=1;i<=m;i++)
a[i]=(int**)malloc((n+1)*sizeof(int*));
for(i=1;i<=m;i++)
for(j=1;j<=n;j++)
a[i][j]=(int*)malloc((p+1)*sizeof(int));
for(i=1;i<=m;i++)
for(j=1;j<=n;j++)
for(k=1;k<=p;k++)
scanf("%d",&a[i][j][k]);
sum=MaxSum3(m,n,p,a);
cout<<sum<<endl;
return0;
}
分享到:
相关推荐
【8601 最大长方体问题】是一个典型的编程挑战,主要涉及到动态规划的算法设计。题目描述了一个三维的长方体,该长方体由m * n * p个小立方体组成,每个小立方体包含一个整数。任务是找到这个长方体中最大的子长方体...
试着设计一个算法,计算所给长方体的最大子长方体。子长方体的大小由它内部所含所有整数之和确定。 约定:当该长方体所有元素均为负数时,输出最大子长方体为0。 Input 第一行3个正整数m,n,p,其中 1,n,p 接下来的m*...
实现3-10最大长方体问题.cpp
试设计一个算法,计算出所给长方体的最大子长长方体。子长方体的大小由它所含所有整数之和确定。 算法设计:对于给定的长、宽、高分别为m,n,p的长方体,计算最大子长方体的大小。 数据输入:由文件input.txt提供输入...
### 最大长方体动态规划算法解析 #### 引言 动态规划算法作为一种高效而灵活的算法设计策略,在处理具有最优子结构特性的实际问题时展现出显著的优势。它通过将复杂问题分解为多个子问题,并利用子问题的解来构建...
试着设计一个算法,计算所给长方体的最大子长方体。子长方体的大小由它内部所含所有整数之和确定。 约定:当该长方体所有元素均为负数时,输出最大子长方体为0。? Input 第一行3个正整数m,n,p,其中 1<=m,n,p&...
java算法分析与设计之最大子长方体问题源代码和实验报告 算法作为计算机专业学生的必修课,同时也是软件开发过程中必备的编程思想,对学习研究计算机专业意义重大;正因为这门课程难,所以除了相关方面的书籍,网络...
本文主要讲述了动态规划(DP)在解决最大子段和、最大子矩阵和最大子长方体问题中的应用。这些问题都是DP模型的变形,通过适当的转化和预处理,可以将高维问题转化为一维的基本问题,然后使用DP模型求解。 1. 基础...
求所给长方体的最大子长方体。子长方体的大小由它所含所有整数之和确定。 Input 第一行3个正整数m,n,p,其中 1,n,p 接下来的m*n行中每行p个整数,表示小立方体中的数。 Output 第一行中的数是计算出的最大子...
1)从长12厘米,宽8厘米,高6厘米的长方体切下最大正方体,正方体的边长应与长方体的最短边相同,即6厘米,所以体积为6³=216立方厘米。 2)要使切割的正方体数量最少,应尽可能大,因此正方体的棱长为1厘米,共能切...
6. 长方体木块锯成最大正方体:最大正方体的棱长等于原长方体的最短边。锯掉的部分是长方体表面积的一部分,可以计算出减少的表面积。 7-10. 这些题目涉及的是长方体容器中物体浸入或取出导致水位上升的问题,利用...
5. 最大正方体的棱长是__厘米。 6. 礼堂四周装彩灯需要的彩灯串数是__串。 7. 鱼缸的长、宽、高分别是__厘米、__厘米、__厘米。 这些知识点涵盖了长方体和正方体的基本属性、面的数量、棱的长度关系以及如何根据...
- 从长方体中锯出最大正方体,正方体的边长应等于原长方体的最短边。例如,124cm×10cm×10cm的长方体最多可锯10个边长为10cm的正方体。 5. **正方体框架的体积**: - 使用12分米长的铁丝围成正方体框架,边长为...
文档中的内容涉及到了多个关于长方体和正方体的数学问题,这些问题主要涵盖了以下几个知识点: 1. **立体几何形状的构建**: - 问题1要求补全小正方形以形成立方体,这需要理解立方体的性质,即六个面都是正方形,...