UVa 10755 Garbage Heap (训练指南,三维前缀和)

算法竞赛训练指南,54 页, 三维的前缀和本题要点:1、 定义前缀和:将长方体切片(按z左边), 每一片就是一个平面;sum[i][j][k]平面上[1,1]到[i][j]在高度为 z == k 时的区域前缀和;二维的前缀和公式:sum(x, y) = array[x][y] + sum(x - 1, y) + sum(x, y - 1) - sum(x - 1, y - 1)2、求解最大和 的子 长方体:遍历底面的左边范围 [x1, x2], [y1, y2] (此时相当于固定了底面),
摘要由CSDN通过智能技术生成

算法竞赛训练指南,54 页, 三维的前缀和

本题要点:
1、 定义前缀和:
将长方体切片(按z左边), 每一片就是一个平面;
sum[i][j][k]平面上[1,1]到[i][j]在高度为 z == k 时的区域前缀和;
二维的前缀和公式:
sum(x, y) = array[x][y] + sum(x - 1, y) + sum(x, y - 1) - sum(x - 1, y - 1)
2、求解最大和 的子 长方体:
遍历底面的左边范围 [x1, x2], [y1, y2] (此时相当于固定了底面), 在遍历 第z 层,
pre: 表示 以第 z - 1 层 结尾的 子长方体 的最大和。
tmp: 表示 当前层(第z层)子长方体 的 和;
如果 pre > 0, 以第 z 层 结尾的 子长方体 的最大和 为 tmp + pre, 否则 为 tmp;
最后, 用 ans 不断更新 ans = max(ans, tmp)即可。
3、 注意使用 long long 来存储每一个点的值

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
typedef long long LL;
const int MaxN = 25;
const LL INF = 1LL << 60;
int A, B, C, Test;
LL sum[MaxN][MaxN][MaxN];// sum[i][j][k]平面上[1,1]到[i][j]在高度为k时的区域前缀和

LL getSum(int x1, int x2
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值