c++题目:吃西瓜

2023-02-15,

西瓜

【问题描述】

老胡买了是长方体形的西瓜来犒劳大家....

这块西瓜长m厘米,宽n厘米,高h厘米.他发现如果把这块西瓜平均地分成m*n*h块1立方厘米的小正方体,那么每一小块都会有一个营养值(可能为负,因为西瓜是有可能坏掉的,但是绝对值不超过200)。

现在老胡决定从这mnh立方厘米的西瓜中切出mm*nn*hh(0<=mm<=m,0<=nn<=n,0<=hh<=h)立方厘米的一块小西瓜(一定是立方体形,长宽高均为整数),送给该场比赛最高分获得者补充营养。他想知道他最多能获得多少营养值。

换句话说,我们希望从一个m*n*h的三维矩阵中,找出一个三维子矩阵,这个子矩阵的权和最大.

一个2*3*4的例子,最优方案为切红色2*3*1部分。

【文件输入】matrix.in

首行三个正整数h,m,n(注意顺序),分别表示西瓜的高,长,宽.

以下h部分,每部分是一个m*n的矩阵,第i部分第j行的第k个数表示西瓜第i层,第j行第k列的那块1立方厘米的小正方体的营养值.

【文件输出】matrix.out

老胡所能得到的最大营养值

解法

一道超简单的水题

创建一个三维数组

直接循环即可轻松解决

#include<bits/stdc++.h>
using namespace std;
int h,m,n;
int main()
{
int wat[33][51][51]={0};
cin>>h>>m>>n;
for(int i=1;i<=h;i++){
for(int j=1;j<=m;j++){
for(int k=1;k<=n;k++){
cin>>wat[i][j][k];
}
}
} int anss=0;
int ans=-10000; for(int i=1;i<=h;i++)
{
for(int j=1;j<=m;j++)
{
for(int k=1;k<=n;k++)
{
anss+=wat[i][j][k]; }
}
ans=max(ans,anss);
anss=0;
} anss=0;
for(int i=1;i<=m;i++)
{
for(int j=1;j<=h;j++)
{
for(int k=1;k<=n;k++)
{
anss+=wat[j][i][k]; }
}
ans=max(ans,anss);
anss=0;
}
anss=0; for(int i=1;i<=n;i++)
{
for(int j=1;j<=h;j++)
{
for(int k=1;k<=m;k++)
{
anss+=wat[j][k][i];
}
}
ans=max(ans,anss);
anss=0;
}
cout<<ans;
return 0;
}

c++题目:吃西瓜的相关教程结束。

《c++题目:吃西瓜.doc》

下载本文的Word格式文档,以方便收藏与打印。