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

代码

#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
#define FOR(i,s,t) for(int i=(s);i<=(t);++i) using namespace std;
typedef long long ll; const ll INF=1ll<<60;
const int maxn=25;
inline void expand(int i, int& b0, int& b1,int& b2)
{
b0=i&1; i>>=1;
b1=i&1; i>>=1;
b2=i&1;
return;
}
inline int sign(int b0,int b1,int b2)
{
return (b0+b1+b2)%2?1:-1;
} ll heap[maxn][maxn][maxn];
ll sum(int x1,int x2,int y1,int y2,int z1,int z2)
{
int dx=x2-x1+1,dy=y2-y1+1,dz=z2-z1+1;
ll s=0;
for(int i=0;i!=8;++i)
{
int b0,b1,b2;
expand(i,b0,b1,b2);
s-=heap[x2-b0*dx][y2-b1*dy][z2-b2*dz]*sign(b0,b1,b2);
}
return s;
}
int main()
{
int T; cin>>T;
while(T--)
{
memset(heap,0,sizeof(heap));
int a,b,c,b0,b1,b2;
cin>>a>>b>>c;
FOR(i,1,a) FOR(j,1,b) FOR(k,1,c) cin>>heap[i][j][k];
FOR(i,1,a) FOR(j,1,b) FOR(k,1,c) FOR(p,1,7)
{
expand(p,b0,b1,b2);
heap[i][j][k]+=heap[i-b0][j-b1][k-b2]*sign(b0,b1,b2);//?????
} ll ans=-INF;
FOR(x1,1,a) FOR(x2,x1,a) FOR(y1,1,b) FOR(y2,y1,b)
{
ll tmpM=0;
FOR(z,1,c)
{
ll s=sum(x1,x2,y1,y2,1,z);
ans=max(ans,s-tmpM);
tmpM=min(tmpM,s);
}
}
cout<<ans<<endl;
if(T) cout<<endl;
}
return 0;
}

【白书训练指南】(UVa10755)Garbage Heap的更多相关文章

  1. uva 10755 - Garbage Heap

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

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

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

  3. 【UVA11107 训练指南】Life Forms【后缀数组】

    题意 输入n(n<=100)个字符串,每个字符串长度<=1000,你的任务是找出一个最长的字符串使得超过一半的字符串都包含这个字符串. 分析 训练指南上后缀数组的一道例题,据说很经典(估计 ...

  4. 白书P61 - 点集配对问题

    白书P61 - 点集配对问题 状压DP #include <iostream> #include <cstdio> #include <cstring> using ...

  5. 白书P60 - 硬币问题

    白书P60 - 硬币问题 完全背包.DP #include <iostream> #include <cstdio> #include <cstring> usin ...

  6. poj 1961 Period(KMP训练指南例题)

    Period Time Limit: 3000MS   Memory Limit: 30000K Total Submissions: 11356   Accepted: 5279 Descripti ...

  7. poj2991 Crane(线段树+集合)白书例题

    题目大意:起重机有n节,题目给出要调节的k节,每节调节成x度,求最后底部的起重机的坐标(最顶上的起点为(0,0)). 分析:一开始我看白书,看不懂他那个向量旋转的坐标是怎么来的,翻了很多博客,才发现, ...

  8. Uva10474-STL水题-白书

    白书的一道水题.话说好久没认真做难题了.今天出了排名,所有队伍里倒数第一啊! 代码没什么可说的了. #include <algorithm> #include <cstring> ...

  9. 算法竞赛入门经典训练指南——UVA 11300 preading the Wealth

    A Communist regime is trying to redistribute wealth in a village. They have have decided to sit ever ...

随机推荐

  1. linux如何安装IntelliJ IDEA

    http://www.linuxidc.com/Linux/2016-12/137946.htm 创建的那个启动器脚本,只要这样输入就可以直接启动idea了

  2. Entity Framework中DbContext结合TransactionScope提交事务的正确方式

    问: I would like know what is the best possible way to implement transactions with DBContext. In part ...

  3. 【译】2分钟介绍Rx

    原文地址:https://medium.com/@andrestaltz/2-minute-introduction-to-rx-24c8ca793877 翻译去掉了一些口水话(⊙o⊙) 诸位应该已经 ...

  4. php开发微信图灵机器人

    本着开源为原则,为这个世界更美好作出一份共享,我就给大家做个指路人,如果实用,记得给提供开源的朋友一些鼓励. 简单介绍一下实现思路,使用swoole扩展接管php运行,由于swoole只能在类UNIX ...

  5. linux设置容器(中间件)开机自启

    /etc/rc.d/rc.local   JAVA_HOME=/usr/java/jdk1.6.0_45 su - goldsign -c '/home/goldsign/Oracle/Middlew ...

  6. weex图片加载更多方法loadmore的使用

    首先,放一个weex中loadmore使用的demo,可以看一下http://dotwe.org/vue/8dd2a10c69e149ae8971f8298cc8bebf 1.在list标签上添加 @ ...

  7. JavaScript小练习3-用循环使三个DIV变色

    题目 初始为黑色,点击后为红色,再次点击为黑色,以后每次点击一次变色. 分析 简单的onclick使用. button的居中可以在外套一个p元素,body中让p居中即可. 三个DIV块的居中,使用ma ...

  8. 【解决】could not find an available, non-overlapping IPv4 address pool among the defaults to assign to the network

    在同一套环境中跑了很多个项目都是用 docker-compose的方式启动的,导致创建的自定义网络过多出现下面的报错 Error response from daemon: could not fin ...

  9. 5 替换空格 JavaScript

    题目描述 请实现一个函数,将一个字符串中的每个空格替换成“%20”.例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy.   原来一个空格字符,替换之后 ...

  10. CSS动画实例

    上一篇讲过css动画transform transition的语法,这一节展示自己做的几个小例子加深印象 1. 线条动画效果 代码:最外层div包含2个小的div : a和b.   a有左右边框(高度 ...