uval0755Garbage Heap

简介: 题意:给出一个三维的由单位立方体组成的长方体,每个单位立方体有一个值,求这个大的长方体的一个子长方体,使得构成它的单位立方体对应的值之和最大。 分析:这是经典问题从一维延伸到三维的情况。画图后就能解决~构造前缀和a[i][j][k]表示以它为右下角的立方体和,然后枚举,复杂度O(n6),这道题目肯定能过。

题意:给出一个三维的由单位立方体组成的长方体,每个单位立方体有一个值,求这个大的长方体的一个子长方体,使得构成它的单位立方体对应的值之和最大。

分析:这是经典问题从一维延伸到三维的情况。画图后就能解决~构造前缀和a[i][j][k]表示以它为右下角的立方体和,然后枚举,复杂度O(n6),这道题目肯定能过。

代码:

View Code
 1 #include <stdio.h>
 2 #include <algorithm>
 3 using namespace std;
 4 long long a[21][21][21];
 5 int main(){
 6     int cas, line = 0;
 7     scanf("%d", &cas);
 8     while(cas--){
 9         int n, m, p, i, j, k, x, y, z;
10         scanf("%d%d%d", &n, &m, &p);
11         for(i=1; i<=n; i++) for(j=1; j<=m; j++) for(k=1; k<=p; k++) 
12             scanf("%lld", &a[i][j][k]);
13         for(i=1; i<=n; i++) for(j=1; j<=m; j++) for(k=1; k<=p; k++)
14             a[i][j][k]+=a[i][j][k-1];
15         for(i=1; i<=n; i++) for(j=1; j<=m; j++) for(k=1; k<=p; k++)
16             a[i][j][k]+=a[i][j-1][k];
17         for(i=1; i<=n; i++) for(j=1; j<=m; j++) for(k=1; k<=p; k++)
18             a[i][j][k]+=a[i-1][j][k];
19         long long ans = -0x3f3f3f3f3f3fll;
20         for(i=0; i<n; i++) for(j=0; j<m; j++) for(k=0; k<p; k++)
21             for(x=i+1; x<=n; x++) for(y=j+1; y<=m; y++) for(z=k+1; z<=p; z++)
22                 ans = max(ans,  a[x][y][z]-a[i][j][k] + a[i][j][z]-a[i][y][z] + a[i][y][k]-a[x][y][k] + a[x][j][k]-a[x][j][z]);
23         if(line++) printf("\n");
24         printf("%lld\n", ans);
25     }
26     return 0;
27 }

发现如果不包含algorithm头文件max函数报错~

目录
相关文章
解决报错:AddressSanitizer: heap-buffer-overflow
leetcode使用AddressSanitizer检查内存是否存在非法访问。报此错,主要是访问了非法内容。 解决方法:数组访问越界,导致此错,后来发现是在访问二维数组的边界row和col弄反了。。
2571 0
|
1月前
|
存储 Java 程序员
堆栈与堆(Stack vs Heap)有什么区别?
堆栈与堆(Stack vs Heap)有什么区别?
28 0
|
7月前
|
存储 算法 Java
JVM系列(3):堆(Heap)
Java堆(Java Heap)是Java虚拟机所管理的内存中最大的一块。Java堆是被所有线程共享的一块内存区域,在虚拟机启动时创建。此内存区域的唯一目的就是存放对象实例,几乎所有的对象实例都在这里分配内存。Java堆是垃圾收集器管理的主要区域,因此很多时候也被称做“GC堆”。
39 0
|
7月前
|
存储 算法 Java
JEP 331: Low-Overhead Heap Profiling
JEP 331: Low-Overhead Heap Profiling
64 1
|
存储 Java
JVM系列(八):堆(Heap)的相关知识介绍
虚拟机栈也称为Java栈,Java每个main方法被执行的时候,JVM都会同步创建一个栈帧(Stack Frame),通过存储局部变量表、操作数栈、动态链接、方法出口等信息来支撑和完成方法的执行。栈帧就是虚拟机栈中的子单位。栈其实只有入栈和出栈两种操作。
JVM系列(八):堆(Heap)的相关知识介绍
|
存储 缓存 算法
堆(heap)和栈(stack)的区别
堆(heap)和栈(stack)的区别
162 0
堆(heap)和栈(stack)的区别
|
存储 算法 搜索推荐
我学会了,封装自己的专属堆Heap
堆是一个特殊的树结构。 在前面的文章中,使用了二分搜索树实现了集合和映射这两个相对来讲更加高层的数据结构。树这种数据结构本身在计算机科学领域占有重要的地位,树这种形状本身可以产生非常多的拓展,在面对不同的问题的时候可以稍微改变或者限制树这种数据结构的性质,从而产生不同的数据结构,高效的解决不同的问题。 之后的文章会有四个不同的例子,堆、线段树、字典树、并查集,通过这些不同的数据结构的学习可以体会到数据结构的灵活之处,以及在设计数据结构的时候其中的一些思考非常重要,因为这些思考会让你对数据结构这个领域有更加深刻的认识。
85 0
我学会了,封装自己的专属堆Heap
|
存储 缓存 监控
heap 和stack 有什么区别
heap 和stack 有什么区别
257 0