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的更多相关文章

  1. 【BZOJ 1178】【APIO 2009】CONVENTION会议中心

    http://www.lydsy.com/JudgeOnline/problem.php?id=1178 这道题想了好久没想明白,倍增数组通过看题解很快就明白了,但是一小段区间内应有的最多线段数一直不 ...

  2. 【BZOJ 1177】 [Apio2009]Oil

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 如上图. 显然如果三个正方形.只可能是上面的情况. 则可以处理一下左上角.右上角.左下角.右下角的前缀最大正方形(dp),以及以某一 ...

  3. 【BZOJ】【1177】【APIO2009】Oil

    DP 找出三个正方形,可以转化为将整个油田切成三个矩形块,每块中各找一个正方形区域,切的形式只有6种,分类更新ans即可 题解:http://trinklee.blog.163.com/blog/st ...

  4. 【BZOJ】3052: [wc2013]糖果公园

    http://www.lydsy.com/JudgeOnline/problem.php?id=3052 题意:n个带颜色的点(m种),q次询问,每次询问x到y的路径上sum{w[次数]*v[颜色]} ...

  5. 【BZOJ】3319: 黑白树

    http://www.lydsy.com/JudgeOnline/problem.php?id=3319 题意:给一棵n节点的树(n<=1e6),m个操作(m<=1e6),每次操作有两种: ...

  6. 【BZOJ】3319: 黑白树(并查集+特殊的技巧/-树链剖分+线段树)

    http://www.lydsy.com/JudgeOnline/problem.php?id=3319 以为是模板题就复习了下hld............................. 然后n ...

  7. 【BZOJ】【2084】【POI2010】Antisymmetry

    Manacher算法 啊……Manacher修改一下就好啦~蛮水的…… Manacher原本是找首尾相同的子串,即回文串,我们这里是要找对应位置不同的“反回文串”(反对称?233) 长度为奇数的肯定不 ...

  8. 【BZOJ】1013: [JSOI2008]球形空间产生器sphere

    [BZOJ]1013: [JSOI2008]球形空间产生器sphere 题意:给n+1个n维的点的坐标,要你求出一个到这n+1个点距离相等的点的坐标: 思路:高斯消元即第i个点和第i+1个点处理出一个 ...

  9. 【转载】之 破解 (【原创】Xenocode Postbuild 2009 加壳破解 (不断更新中...))

    声明 本文转载,感谢原作者dotNetSafe分享 [原创]Xenocode Postbuild 2009 加壳破解 (不断更新中...) http://bbs.pediy.com/showthrea ...

随机推荐

  1. Activity的onCreate()的PersistableBundle 参数坑。

    Bundle 与 PersistableBundle 区别 仅仅是Activity oncreate()的一个参数与两个参数的区别: @Override public void onCreate(Bu ...

  2. 第16章 调色板管理器_16.4 一个DIB位图库的实现(2)

    //接上一篇 //DibPal.h /*----------------------------------------------------------------- DIBPAL.H heade ...

  3. AC日记——Dividing poj 1014

    Dividing Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 69575   Accepted: 18138 Descri ...

  4. 【Unity3d】Ray射线初探-射线的原理及用法

    http://www.xiaobao1993.com/231.html 射线是一个无穷的线,开始于origin并沿着direction方向. 当射线碰到物体后.它就会停止发射. 在屏幕中拉一个CUBE ...

  5. guava 学习笔记(二) 瓜娃(guava)的API快速熟悉使用

    guava 学习笔记(二) 瓜娃(guava)的API快速熟悉使用 1,大纲 让我们来熟悉瓜娃,并体验下它的一些API,分成如下几个部分: Introduction Guava Collection ...

  6. qau-国庆七天乐——B

      B - Bull Math   Time Limit:1000MS     Memory Limit:65536KB     64bit IO Format:%lld & %llu Sub ...

  7. noip模拟赛(一)密码

    密码 (pasuwado.pas/c/cpp) [问题描述] 哪里有压迫,哪里就有反抗. moreD的宠物在法庭的帮助下终于反抗了.作为一只聪明的宠物,他打算把魔法使moreD的魔法书盗去,夺取mor ...

  8. Android之SDK、NDK、JNI和so文件

    1.     SDK Android SDK(AndroidSoftware Development Kit),即Android软件开发工具包,Android的SDK基于Java实现,这意味着基于An ...

  9. Android之监听手机软键盘弹起与关闭

    背景: 在很多App开发过程中需要在Activity中监听Android设备的软键盘弹起与关闭,但是Android似乎没有提供相关的的监听API给我们来调用,本文提供了一个可行的办法来监听软键盘的弹起 ...

  10. 在把webpack作为本地开发依赖安装的时候报错

    在把webpack作为本地开发依赖安装的时候报错 Refusing to install webpack as a dependency of itself 原因是package.json里的name ...