在题中的A*B*C的矩形中,当确定X1,X2,Y1,Y2时,1->z的子矩形的和为

sum[x2][y2][1] -(sum[x1-1][y2][1] + sum[x2][y1-1][1] -sum[x1-1][y1-1][1] + sum[x2][y2][z+1] - sum[x1-1][y2][z+1] -sum[x2][y1-1][z+1] + sum[x1-1][y1-1][z+1]);

sum[x][y][z]指的是,以(x,y,z)为右下角的矩形的和

sum[x][y][z]的递推公式为 sum[k][j][i] = (sum[k-1][j][i] + sum[k][j-1][i] -sum[k-1][j-1][i] + sum[k][j][i+1] - sum[k-1][j][i+1] -sum[k][j-1][i+1] + sum[k-1][j-1][i+1] + d[k][j][i]);

本题最后结果可能会很大,所以ans的初值要赋值为最小的longlong

#include<bits/stdc++.h>

#define inf 0x3f3f3f3f

const int maxn=;

using namespace std;

typedef long long ll;

int t;

int a,b,c;

ll d[maxn+][maxn+][maxn+];

ll sum[maxn+][maxn+][maxn+];

int main()
{
scanf("%d",&t);
while(t--){
memset(d, ,sizeof(d));
memset(sum,,sizeof(sum));
scanf("%d%d%d",&a,&b,&c);
for(int i = ; i <= a; i++){
for(int j = ; j <= b; ++j){
for(int k = ; k <= c; ++k){
scanf("%lld",&d[i][j][k]);
}
}
} for(int i = c; i >= ; --i){
for(int j = ; j <= b; ++j){
for(int k = ; k <= a; ++k){
sum[k][j][i] = (sum[k-][j][i] + sum[k][j-][i] -
sum[k-][j-][i] + sum[k][j][i+] - sum[k-][j][i+] -
sum[k][j-][i+] + sum[k-][j-][i+] + d[k][j][i]);
}
}
} ll ans = -(ll)((1LL)<<);
for(int x1 = ; x1 <= a; ++x1){
for(int x2 = x1; x2 <= a; ++x2){
for(int y1 = ; y1 <= b; ++y1){
for(int y2 = y1; y2 <= b; ++y2){
ll min_sumz = ;
for(int z = ; z <= c; ++z){
ll temp = sum[x2][y2][] -
(sum[x1-][y2][] + sum[x2][y1-][] -
sum[x1-][y1-][] + sum[x2][y2][z+] - sum[x1-][y2][z+] -
sum[x2][y1-][z+] + sum[x1-][y1-][z+]);
ans = max(ans, temp - min_sumz);
min_sumz = min(min_sumz, temp);
}
}
}
}
} printf("%lld\n",ans);
if(t){
printf("\n");
}
}
return ;
}

Uva10755的更多相关文章

  1. 【降维解法:最大字段和->最大子矩阵和->最终版最大子长方体和】【UVA10755】Garbage Heap

    突然感觉刷完这一套专题后 码力有了质的飞跃,fighting 努力会有结果! 最大字段和是一个很经典的问题 O(n)算法 而对于最大子矩阵和 可以思考一个这样的想法 枚举上下边界i,j把i到j这一段的 ...

  2. 【白书训练指南】(UVa10755)Garbage Heap

    先po代码,之后把我那几个不太明了的知识点讲讲,巩固以下.三维的扫描线算法想要掌握还真是有一定的难度的. 代码 #include <iostream> #include <cstri ...

  3. uva 10755 - Garbage Heap

    http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&p ...

随机推荐

  1. input标签添加上disable属性在移动端字体颜色不兼容的解决办法。

    input[disabled],input:disabled,input.disabled{ color: #999; -webkit-text-fill-color:#999; -webkit-op ...

  2. 分享知识-快乐自己:Hibernate 中的 HQL 语句的实际应用

    概要: Hibernate 支持三种查询方式: HQL查询.Criteria查询及原声 SQL (Native SQL)查询. HQL(Hibernate Query Language,Hiberna ...

  3. hdu 1002 A + B Problem II(大数)

    题意:就是求a+b (a,b都不超过1000位) 思路:用数组存储 第一道大数的题目,虽然很水,纪念一下! 代码: #include<cstdio> #include<cstring ...

  4. [原创]Java在线编辑word文档调用PageOffice实现并发控制

    1.功能介绍 PageOffice的并发控制功能用来解决多个用户在线编辑同一篇文档可能造成的互相覆盖修改结果的技术难题. B/S架构下用户访问都是并发的,也就是说经常会出现同时N个用户对一个服务器页面 ...

  5. linux命令学习笔记(45):free 命令

    free命令可以显示Linux系统中空闲的.已用的物理内存及swap内存,及被内核使用的buffer.在Linux系统监控的 工具中,free命令是最经常使用的命令之一. .命令格式: free [参 ...

  6. FileHeader 详解文件头部注释-sublimeText

    FileHeader 前言: 直奔主题吧,sublimeText 的大部分插件都是非常好用,易用的,而且很容易找到资料.这次用 FileHeader 发现网上的资料很少,而且大部分说得都很模糊,或者直 ...

  7. kettle导数到user_用于left join_20160928

    这篇博客主要是给mysql left join做铺垫,需要现在本地数据库创建一个users 数据表 然后去和 test_a03order表  left join 一.首先在local_db数据库先创建 ...

  8. 三:JMS消息服务规范

    一:JMS是什么?--->JMS即Java消息服务(Java Message Service)应用程序接口,是一个Java平台中关于面向消息中间件(MOM)的API--->用于在两个应用程 ...

  9. 打印菱形(Print Diamond/Lozenge)

      → ↓     *       * * *   * * * * *   * * *       *     总结了一下关于打印菱形的思路. 通常是从循环变量之间的映射关系入手,推导出相应的公式.这 ...

  10. [转载]IOCP模型的总结

    原文:IOCP模型的总结 IOCP(I/O Completion Port,I/O完成端口)是性能最好的一种I/O模型.它是应用程序使用线程池处理异步I/O请求的一种机制.在处理多个并发的异步I/O请 ...