首页 > 编程语言 >c++题目:吃西瓜

c++题目:吃西瓜

时间:2022-11-19 15:11:46浏览次数:59  
标签:正方体 西瓜 题目 立方厘米 int 矩阵 c++ 一个三维

吃西瓜

【问题描述】
老胡买了是长方体形的西瓜来犒劳大家....
这块西瓜长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部分。
image

【文件输入】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;
}

标签:正方体,西瓜,题目,立方厘米,int,矩阵,c++,一个三维
From: https://www.cnblogs.com/demc/p/16906148.html

相关文章

  • C++学习------cinttypes头文件的源码学习02---函数定义
    函数定义257__BEGIN_DECLS258intmax_timaxabs(intmax_t__i)__attribute_const____INTRODUCED_IN(19);259imaxdiv_timaxdiv(intmax_t__numerator,intmax_t__de......
  • [排序算法] 2路插入排序 (C++)
    前言本文章是建立在插入排序的基础上写的,如果还有不懂插入排序的童鞋先停下脚步,可以先看看这里~❤❤❤直接/折半插入排序2路插入排序解释在插入排序中,当待插入......
  • Java(Android)与C++之间的Socket通信
    Java与C++之间的Socket通信,对于小的数据量和控制命令,直接可以封装成json或xml格式,进行传输。但对于文件等大数据量传输,必须要将文件封装成帧,每一帧都设定固定大小的缓冲区,逐......
  • C++ZeroMemory内存清零
      看:https://www.cnblogs.com/liming19680104/p/10499280.html         ......
  • [排序算法] 插入排序 (C++)
    插入排序解释插入排序很好理解,其步骤是:先将第一个数据元素看作是一个有序序列,后面的n-1个数据元素看作是未排序序列。对后面未排序序列中的第一个数据元素在这个有序序......
  • [排序算法] 简单选择排序 (C++)
    简单选择排序原理简单选择排序SelectSort是一种十分直观地排序方法。其原理是每次从未排序的元素中找到当前最小的元素,放在当前未排序序列的首位。一直重复操作直至最后......
  • [排序算法] 双向冒泡排序 (C++)
    前言本文章是建立在冒泡排序的基础上写的,如还有对冒泡排序不了解的童鞋,可以看看这里哦~冒泡排序C++双向冒泡排序原理双向冒泡排序的基本思想与冒泡排序还是一样......
  • C++ 反射实现
    //class.h#ifndefCLASS_H#defineCLASS_H#include<iostream>#include<functional>#include<memory>#include<map>#include<stdarg.h>usingnamespacestd;......
  • C++编写Time类显示系统时间
    编写Time类,要求:(1)包含年、月、日、时、分、秒的信息。(2)构造函数将类的对象初始化为系统当前时间(使用头文件time.h中的time函数。)(3)能按照标准格式输出对象表示的时间。......
  • C++ referemce and dereference
    //对reference&和dereference*的进一步理解//#include"iostream"intmain(){inta=9;//等号左边&为引用,取alias举个例子//int&a=b;b=......