【BZOJ 1177】【APIO 2009】Oil
http://www.lydsy.com/JudgeOnline/problem.php?id=1177
前缀和优化,时间复杂度$O(nm)$
因为数据不全,快速读入会导致RE,切记!
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N = 1503;
int in() {
int k = 0, fh = 1; char c = getchar();
for(; c < '0' || c > '9'; c = getchar())
if (c == '-') fh = -1;
for(; c >= '0' && c <= '9'; c = getchar())
k = (k << 3) + (k << 1) + c - '0';
return k * fh;
} int a[N][N], a1[N][N], a2[N][N], a3[N][N], a4[N][N], s[N][N];
int n, m, k, m1[N][N], m2[N][N], m3[N][N], m4[N][N], h[N], l[N]; void init1() {
int S;
for(int i = k; i <= n; ++i)
for(int j = k; j <= m; ++j) {
S = s[i][j] - s[i - k][j] - s[i][j - k] + s[i - k][j - k];
a1[i - k + 1][j - k + 1] = S;
a2[i - k + 1][j] = S;
a3[i][j - k + 1] = S;
a4[i][j] = S;
}
} void init2() {
for(int i = n - k + 1; i >= 1; --i)
for(int j = m - k + 1; j >= 1; --j)
m1[i][j] = max(a1[i][j], max(m1[i + 1][j], m1[i][j + 1]));
for(int i = n - k + 1; i >= 1; --i)
for(int j = k; j <= m; ++j)
m2[i][j] = max(a2[i][j], max(m2[i + 1][j], m2[i][j - 1]));
for(int i = k; i <= n; ++i)
for(int j = m - k + 1; j >= 1; --j)
m3[i][j] = max(a3[i][j], max(m3[i - 1][j], m3[i][j + 1]));
for(int i = k; i <= n; ++i)
for(int j = k; j <= m; ++j)
m4[i][j] = max(a4[i][j], max(m4[i - 1][j], m4[i][j - 1]));
} int main() {
scanf("%d%d%d", &n, &m, &k);
for(int i = 1; i <= n; ++i)
for(int j = 1; j <= m; ++j) {
scanf("%d", &a[i][j]);
s[i][j] = s[i - 1][j] + s[i][j - 1] + a[i][j] - s[i - 1][j - 1];
} init1(); init2(); int ans = 0, f1, f2, f3, f4;
for(int i = k; i <= n - k; ++i)
for(int j = k; j <= m - k; ++j) {
f1 = m4[i][j] + m3[i][j + 1] + m1[i + 1][1];
f2 = m3[i][j + 1] + m1[i + 1][j + 1] + m2[1][j];
f3 = m2[i + 1][j] + m1[i + 1][j + 1] + m3[i][1];
f4 = m4[i][j] + m2[i + 1][j] + m4[1][j + 1];
ans = max(ans, f1);
ans = max(ans, f2);
ans = max(ans, f3);
ans = max(ans, f4);
} for(int i = k + 1; i <= n - (k << 1) + 1; ++i)
for(int j = 1; j <= m - k + 1; ++j)
h[i] = max(h[i], a1[i][j]);
for(int i = k; i <= n - (k << 1); ++i)
ans = max(ans, m3[i][1] + m1[i + k + 1][1] + h[i + 1]);
for(int j = k + 1; j <= m - (k << 1) + 1; ++j)
for(int i = 1; i <= n - k + 1; ++i)
l[j] = max(l[j], a1[i][j]);
for(int j = k; j <= m - (k << 1); ++j)
ans = max(ans, m2[1][j] + m1[1][j + k + 1] + l[j + 1]); printf("%d\n", ans);
return 0;
}
APIO的题目~
【BZOJ 1177】【APIO 2009】Oil的更多相关文章
- 【BZOJ 1178】【APIO 2009】CONVENTION会议中心
http://www.lydsy.com/JudgeOnline/problem.php?id=1178 这道题想了好久没想明白,倍增数组通过看题解很快就明白了,但是一小段区间内应有的最多线段数一直不 ...
- 【BZOJ 1177】 [Apio2009]Oil
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 如上图. 显然如果三个正方形.只可能是上面的情况. 则可以处理一下左上角.右上角.左下角.右下角的前缀最大正方形(dp),以及以某一 ...
- 【BZOJ】【1177】【APIO2009】Oil
DP 找出三个正方形,可以转化为将整个油田切成三个矩形块,每块中各找一个正方形区域,切的形式只有6种,分类更新ans即可 题解:http://trinklee.blog.163.com/blog/st ...
- 【BZOJ】3052: [wc2013]糖果公园
http://www.lydsy.com/JudgeOnline/problem.php?id=3052 题意:n个带颜色的点(m种),q次询问,每次询问x到y的路径上sum{w[次数]*v[颜色]} ...
- 【BZOJ】3319: 黑白树
http://www.lydsy.com/JudgeOnline/problem.php?id=3319 题意:给一棵n节点的树(n<=1e6),m个操作(m<=1e6),每次操作有两种: ...
- 【BZOJ】3319: 黑白树(并查集+特殊的技巧/-树链剖分+线段树)
http://www.lydsy.com/JudgeOnline/problem.php?id=3319 以为是模板题就复习了下hld............................. 然后n ...
- 【BZOJ】【2084】【POI2010】Antisymmetry
Manacher算法 啊……Manacher修改一下就好啦~蛮水的…… Manacher原本是找首尾相同的子串,即回文串,我们这里是要找对应位置不同的“反回文串”(反对称?233) 长度为奇数的肯定不 ...
- 【BZOJ】1013: [JSOI2008]球形空间产生器sphere
[BZOJ]1013: [JSOI2008]球形空间产生器sphere 题意:给n+1个n维的点的坐标,要你求出一个到这n+1个点距离相等的点的坐标: 思路:高斯消元即第i个点和第i+1个点处理出一个 ...
- 【转载】之 破解 (【原创】Xenocode Postbuild 2009 加壳破解 (不断更新中...))
声明 本文转载,感谢原作者dotNetSafe分享 [原创]Xenocode Postbuild 2009 加壳破解 (不断更新中...) http://bbs.pediy.com/showthrea ...
随机推荐
- 使用ZeroNet搭建P2P全球网站
软件 ZeroNet是一个利用比特币加密和BT技术提供不受审查的网络与通信的BT平台,ZeroNet网络功能已经得到完整的种子的支持和加密连接,保证用户通信和文件共享的安全.使用ZeroNet,你可以 ...
- Eclipse较为常用快捷键
今天在学习Eclipse的使用时,Mark了一些较为常用的快捷键,拿出来和大家分享一下: Ctrl+1 快捷修复 Ctrl+D 快捷删除行 Shift+Enter 在当前行任意位置光标跳转到下一行 C ...
- Google类VR设备知识
前言 本文所指的google类vr设备是指: 谷歌的Cardboard.三星Gear VR.暴风魔镜等这样的手机VR盒子,而并不是HTC Vive这类. 人眼立体感知能力 人的左右眼看到的东西是有差别 ...
- u3d_shader_surface_shader_1
http://docs.unity3d.com/Manual/SL-SurfaceShaders.html 一:surface shader是啥 Writing shaders that intera ...
- hibernate save,update,saveorupdate方法有什么区别
save肯定是添加的时候用,update修改时候用,saveorupdate是添加或修改,如果真是这样save和update的存在就没意义了,我们直接saveorupdate就行了. save在添加用 ...
- ios客户端快速滚动和回弹效果的实现
现在很多for Mobile的HTML5网页内都有快速滚动和回弹的效果,看上去和原生app的效率都有得一拼. 要实现这个效果很简单,只需要给容器加一行css代码即可 -webkit-overflow- ...
- 如何迁移Alwayson AG
Windows cluster要求同一个cluster中的所有windows版本都是相同的,这样就出现一个问题,当我们要将对windows进行升级时,(例如从windows 2008 R2升级到win ...
- Html5 Egret游戏开发 成语大挑战(九)设置界面和声音管理
在上一篇中,简单的使用界面元素快速实现了一个游戏中的二级页面,这种直接在游戏页面上做UI的做法并不太好,原因是,UI会让游戏的压力变大,即使它是隐蔽的,如果同样的功能在其它的地方也是一样的,那么就要写 ...
- 利用Spring MVC搭建REST Service
之前写过一篇 利用JAX-RS快速开发RESTful 服务 今天来看下spring-mvc框架如何实现类似的功能: 一.pom.xml <?xml version="1.0" ...
- 安装Ubuntu时的硬盘分区方案
如果你准备在硬盘里只安装Ubuntu一个操作系统的话,建议你采用一个“/”.一个“swap”和一个“/home”的三分区方案:/ :10GB-15GB.swap:物理内存小于或等于 512MB,建议分 ...