[BZOJ]1177: [Apio2009]Oil
题目大意:给出一个n*m的矩阵,选出3个不相交的k*k子矩阵,使得子矩阵中元素和最大。(k<=n,m<=1500)
思路:选出的子矩阵有3种情况:横着排三个、竖着排三个、三角状分布(其中有四种朝向),分情况判一判就好了。
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
char B[<<],*S=B,C;int X;
inline int read()
{
while((C=*S++)<''||C>'');
for(X=C-'';(C=*S++)>=''&&C<='';)X=(X<<)+(X<<)+C-'';
return X;
}
#define MN 1500
#define L(i,k,n) for(register int i=k;i<=n;++i)
#define R(i,k,n) for(register int i=n-k;i;--i)
int s[MN+][MN+],f1[MN+][MN+],f2[MN+][MN+],f3[MN+][MN+],f4[MN+][MN+];
int main()
{
fread(B,,<<,stdin);
int n,m,k,x,ans=;
n=read();m=read();k=read();
L(i,,n)L(j,,m)s[i][j]=s[i-][j]+s[i][j-]-s[i-][j-]+read();
L(i,k,n)L(j,k,m)f1[i][j]=max(max(f1[i-][j],f1[i][j-]),s[i][j]-s[i-k][j]-s[i][j-k]+s[i-k][j-k]);
L(i,k,n)R(j,k,m)f2[i][j]=max(max(f2[i-][j],f2[i][j+]),s[i][j+k]-s[i-k][j+k]-s[i][j]+s[i-k][j]);
R(i,k,n)L(j,k,m)f3[i][j]=max(max(f3[i+][j],f3[i][j-]),s[i+k][j]-s[i][j]-s[i+k][j-k]+s[i][j-k]);
R(i,k,n)R(j,k,m)f4[i][j]=max(max(f4[i+][j],f4[i][j+]),s[i+k][j+k]-s[i][j+k]-s[i+k][j]+s[i][j]);
L(i,k<<,n)L(j,k,m)ans=max(ans,f1[i-k][m]+s[i][j]-s[i-k][j]-s[i][j-k]+s[i-k][j-k]+f3[i][m]);
L(j,k<<,m)L(i,k,n)ans=max(ans,f1[n][j-k]+s[i][j]-s[i-k][j]-s[i][j-k]+s[i-k][j-k]+f2[n][j]);
L(i,k,n-k)L(j,k,m-k)ans=max(ans,max(max(f1[i][j]+f2[i][j]+f3[i][m],f1[i][j]+f3[i][j]+f2[n][j]),
max(f2[i][j]+f4[i][j]+f1[n][j],f3[i][j]+f4[i][j]+f1[i][m])));
printf("%d",ans);
}
[BZOJ]1177: [Apio2009]Oil的更多相关文章
- 枚举(分类讨论):BZOJ 1177: [Apio2009]Oil
1177: [Apio2009]Oil Time Limit: 15 Sec Memory Limit: 162 MBSubmit: 1477 Solved: 589[Submit] Descri ...
- BZOJ 1177 [Apio2009]Oil(递推)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=1177 [题目大意] 给出一个矩阵,从中选出3个k*k且不相交的矩阵,使得其总和最大 [ ...
- [BZOJ1177][Apio2009]Oil
[BZOJ1177][Apio2009]Oil 试题描述 采油区域 Siruseri政府决定将石油资源丰富的Navalur省的土地拍卖给私人承包商以建立油井.被拍卖的整块土地为一个矩形区域,被划分为M ...
- bzoj1177 [Apio2009]Oil 二维前缀最大值,和
[Apio2009]Oil Time Limit: 15 Sec Memory Limit: 162 MBSubmit: 2300 Solved: 932[Submit][Status][Disc ...
- 【BZOJ 1177】 [Apio2009]Oil
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 如上图. 显然如果三个正方形.只可能是上面的情况. 则可以处理一下左上角.右上角.左下角.右下角的前缀最大正方形(dp),以及以某一 ...
- 【BZOJ 1177】【APIO 2009】Oil
http://www.lydsy.com/JudgeOnline/problem.php?id=1177 前缀和优化,时间复杂度$O(nm)$ 因为数据不全,快速读入会导致RE,切记! #includ ...
- [BZOJ 1177] Oil
Link:https://www.lydsy.com/JudgeOnline/problem.php?id=1177 Solution: 相当于将大矩形分为3块,取每块中最大的正方形 对于此类分成几块 ...
- BZOJ 1177 Oil(特技枚举)
对于三个正方形的位置一共有六种情况. 预处理出(i,j)左上角,左下角,右上角,右下角区域内最大权值的正方形. 枚举分界线更新答案. 刚开始想了一个错误的DP也是蠢啊. #include<set ...
- BZOJ 1179: [Apio2009]Atm( tarjan + 最短路 )
对于一个强连通分量, 一定是整个走或者不走, 所以tarjan缩点然后跑dijkstra. ------------------------------------------------------ ...
随机推荐
- python实现朴素贝叶斯
参考:<机器学习实战>- Machine Learning in Action 一. 基本思想 简单的说,用概率的高低来决定数据属于哪一类别,这就是贝叶斯决策理论的核心思想,即选择具有最 ...
- Flask 扩展 国际化 本地化
pip install flask-babel 先初始化一个Flask-Babel的实例 from flask import Flask from flask.ext.babel import Bab ...
- Python实现网站模拟登陆
一.实验简介 1.1 基本介绍 本实验中我们将通过分析登陆流程并使用 Python 实现模拟登陆到一个实验提供的网站,在实验过程中将学习并实践 Python 的网络编程,Python 实现模拟登陆的方 ...
- Python 实现火车票查询工具
注意:由于 12306 的接口经常变化,课程内容可能很快过期,如果遇到接口问题,需要根据最新的接口对代码进行适当修改才可以完成实验. 一.实验简介 当你想查询一下火车票信息的时候,你还在上 12306 ...
- Welcome to Django!
Welcome to Django! 实验简介 Django是一个可以使Web开发工作更加高效愉快的Web开发框架.Django可以让你用最小的代价构建和维护更高质量的Web应用程序. 从好的方面来看 ...
- Java HashMap工作原理及实现
Java HashMap工作原理及实现 2016/03/20 | 分类: 基础技术 | 0 条评论 | 标签: HASHMAP 分享到:3 原文出处: Yikun 1. 概述 从本文你可以学习到: 什 ...
- java利用iTextWorker生成pdf
使用itext生成pdf,在linux环境下,中文全部失踪,因为itext要在linux下支持中文字体需要引入itext-asian, 并添加一个字体类. public static class Pd ...
- [UWP]针对UWP程序多语言支持的总结,含RTL
UWP 对 Globalization and localization 的支持非常好,可以非常容易地实现应用程序本地化. 所谓本地化,表现最为直观的就是UI上文字和布局方式了,针对文字,提供不同的语 ...
- RSA的公钥、私钥
一.举个例子 1.发消息 用对方的公钥给对方发消息 2.发公告 发公告的时候,用自己的私钥形成签名! 二.加密和签名 RSA的公钥.私钥是互相对应的,RSA会生成两个密钥,你可以把任何一个用于公钥,然 ...
- GIT入门笔记(20)- 使用eclipse 基于 git 开发过程梳理
一.创建本地分支 1.下载/更新 本地 主干 如果本地还没有 本地主干,下载:git clone 如果本地已有了 本地主干,更新:git pull 工程右键菜单:team -> pull 2.基 ...