uva 10755 - Garbage Heap 杂

 题意就是求三维空间里和最大的一片空间的值

 输入:T//组数

A,B,C// 三个维度

T1,T2,T3……//(1,1,1),(1,1,2)……(1,2,1)每一个的值

经典的二维求区间和扩展到了三维,计算时的加加减减好繁杂,就是枚举1-2^k(k为维数) 如果有奇数个1为加法,偶数个1为减法。

 最后利用保存局部最优解,将枚举降维,n^6变n^5

 注意读入也要用long long,组之间有空行

/*
author:jxy
lang:C/C++
university:China,Xidian University
**If you need to reprint,please indicate the source**
*/
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <algorithm>
using namespace std;
int A,B,C;
long long sum[22][22][22];
#define inf 17179869184001ll  //2^31 * 20^3 + 1
long long calc(int x1,int x2,int y1,int y2,int z1,int z2)
{
    return sum[x2][y2][z2]-sum[x1][y2][z2]-sum[x2][y1][z2]-sum[x2][y2][z1]+sum[x1][y1][z2]+sum[x1][y2][z1]+sum[x2][y1][z1]-sum[x1][y1][z1];
}
int main()
{
    int T;
    scanf("%d",&T);
    while(T--)
    {
        long long ans=-inf,tmp;
        scanf("%d%d%d",&A,&B,&C);
        memset(sum,0,sizeof(sum));
        int i,j,k;
        for(i=1;i<=A;i++)
            for(j=1;j<=B;j++)
                for(k=1;k<=C;k++)
                {
                    scanf("%lld",&tmp);
                    sum[i][j][k]=sum[i-1][j][k]+sum[i][j-1][k]+sum[i][j][k-1]-sum[i-1][j-1][k]-sum[i-1][j][k-1]-sum[i][j-1][k-1]+sum[i-1][j-1][k-1]+tmp;
                    //二进制001-111 有奇数个1时为+,偶数个为-,可以推广到高维
                }
        for(int x1=0;x1<A;x1++)
         for(int y1=0;y1<B;y1++)
          for(int x2=x1+1;x2<=A;x2++)
           for(int y2=y1+1;y2<=B;y2++)
           {
            long long before=0;
            for(int z=1;z<=C;z++)//利用before降维
            {
                tmp=calc(x1,x2,y1,y2,0,z);
                ans=max(ans,tmp-before);
                before=min(before,tmp);
            }
           }
        printf("%lld\n",ans);
        if(T)puts("");
    }
}
时间: 2024-10-07 20:35:00

uva 10755 - Garbage Heap 杂的相关文章

算法题:uva 10755

题目链接: http://uva.onlinejudge.org/index.php? option=com_onlinejudge&Itemid=8&category=460&page=show_problem&problem=1696 和二维的最大子矩阵的思想是一样的,只是变成了三维的. 枚举层数的上下界, 然后把上下 界之间的所有层"压缩"成一层,在这"一层"上用二维的方法再计算. 注意用long long 代码: #inclu

漫谈.Net中的自动垃圾收集(Garbage Collection)机制(转)

作者:cornfield漫谈.Net中的自动垃圾收集(Garbage Collection)机制    一直以来,垃圾收集(Garbage Collection)在软件界的名声并不好.很多程序员认为垃圾收集做得不如自己来的直接,高效.这种说法有些时候是对的,一个精心为自己的特定程序设计定制的内存回收方法,肯定比为所有程序提供垃圾回收性能要高.但那对程序员要求甚高,一个项目下来花在内存回收的设计上的时间和精力是很可观的,而稍有不慎便会酿成灾难性的错误,技术再高超的程序员负担不起,整个现代软件工业也

UVa 10664 Luggage (0-1背包)

10664 - Luggage Time limit: 3.000 seconds http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=24&page=show_problem&problem=1605 Peter and his friends are on holiday, so they have decided to make a trip by car to k

理解Heap Profling名词-Shallow和Retained Sizes

所有包含Heap Profling功能的工具(MAT, Yourkit, JProfiler, TPTP等)都会使用到两个名词,一个是Shallow Size,另一个是 Retained Size. 这是两个在平时不太常见的名词,本文会对这两个名词做一个详细的解释. Shallow Size 对象自身占用的内存大小,不包括它引用的对象. 针对非数组类型的对象,它的大小就是对象与它所有的成员变量大小的总和.当然这里面还会包括一些java语言特性的数据存储单元. 针对数组类型的对象,它的大小是数组元

Heap updates are NOT ENABLED

Displays some heap stats, updated during garbage collection. If, when a VM is selected, the VM Heap view says that heap updates are not enabled, click the "Show heap updates" button, located in the top-left toolbar. Back in the VM Heap view, cli

Garbage First

1 G1 的基本概念 1 : HotSpot:现有的垃圾回收器: Serial GC, Parallel GC ,Concurrent Mark Sweep Gc 这三个GC不同: 1:如果你想要最小化的使用内存和并行开销:选Serial GC2:如果你想要最大化应用程序的吞吐量选用Parallel GC 3:如果想要最小化GC的中断或停顿时间选CMS GC 2 G1是Garbage First, 意思: G1是一个并行回收器,它把内存分割为很多不相关的区间(Region),每一个区间可以属于老

细述 Java垃圾回收机制→How Java Garbage Collection Works?

这是垃圾回收机制系列文章的第二篇.希望您已经读过了第一部分Java垃圾回收简介. Java垃圾回收是一个自动运行的管理程序运行时使用的内存的进程.通过GC的自动执行JVM将程序员从申请和释放内存的繁重操作中解放出来. Java垃圾回收GC初始化 作为一个自动执行的进程,程序员不需要在代码中主动初始化GC.Java提供了System.gc()和Runtime.gc()这两个hook来请求JVM调用GC进程. 尽管要求系统机制给程序员提供调用GC的机会,但是实际上这是由JVM负责决定的.JVM可以选

java在显示图像的时候出现:Java heap space该怎么办?

问题描述 在使用jLabel显示一幅图像时,每次都是显示一张灰色的空白图像,源图(GEOTIFF格式)根本显示不出来.得到bufferedimage:grReader = new GeoTiffReader(testFile);gc = (GridCoverage2D) grReader.read(null);CoordinateReferenceSystem crs= grReader.getCrs();System.out.println("wkt=" + grReader.get

Java.Lang.OutOfMemoryError 错误——设置java Heap Size

1.确定当前系统可以设置的最大值: Below command will help you to identify the maximum memory heap size than can be allocated to a JVM process. java -mx[value]m -version Start with a higher value like 4G or higher and slowly cut down to the maximum allowed value. 举例: