【BZOJ 1177】 [Apio2009]Oil
【链接】 我是链接,点我呀:)
【题意】
在这里输入题意
【题解】

如上图。
显然如果三个正方形。只可能是上面的情况。
则可以处理一下左上角、右上角、左下角、右下角的前缀最大正方形(dp),以及以某一列为底部,某一行为底部的最大正方形和。
然后枚举一下两条分界线就能做出来啦。
细节题。
【代码】
#include <bits/stdc++.h>
#define LL long long
#define rep1(i,a,b) for (int i = a;i <= b;i++)
#define rep2(i,a,b) for (int i = a;i >= b;i--)
#define all(x) x.begin(),x.end()
#define pb push_back
#define lson l,mid,rt<<1
#define rson mid+1,r,rt<<1|1
using namespace std;
const double pi = acos(-1);
const int dx[4] = {0,0,1,-1};
const int dy[4] = {1,-1,0,0};
const int N = 1500;
int n,m,k;
int x[N+10][N+10],a[N+10][N+10],b[N+10][N+10],c[N+10][N+10],d[N+10][N+10],maxh[N+10],maxl[N+10],A[N+10][N+10];
int calc(int x,int y){
return A[x][y]-A[x-k][y]-A[x][y-k]+A[x-k][y-k];
}
int main(){
#ifdef LOCAL_DEFINE
freopen("rush_in.txt", "r", stdin);
#endif
scanf("%d%d%d",&n,&m,&k);
rep1(i,1,n)
rep1(j,1,m)
scanf("%d",&x[i][j]);
rep1(i,1,n)
rep1(j,1,m)
a[i][j]=x[i][j] + a[i-1][j]+a[i][j-1]-a[i-1][j-1];
rep1(i,1,n)
rep1(j,1,m)
A[i][j] = a[i][j];
memset(a,0,sizeof a);
rep1(i,k,n)
rep1(j,k,m)
maxh[i] = max(maxh[i],calc(i,j));
rep1(j,k,m)
rep1(i,k,n)
maxl[j] = max(maxl[j],calc(i,j));
rep1(i,k,n)
rep1(j,k,m){
a[i][j] = max(max(a[i-1][j],a[i][j-1]),calc(i,j));
}
rep1(i,k,n)
rep2(j,m-k+1,1)
b[i][j] = max(max(b[i-1][j],b[i][j+1]),calc(i,j+k-1));
rep2(i,n-k+1,1)
rep1(j,k,m){
c[i][j] = max(max(c[i+1][j],c[i][j-1]),calc(i+k-1,j));
}
rep2(i,n-k+1,1)
rep2(j,m-k+1,1)
d[i][j] = max(max(d[i+1][j],d[i][j+1]),calc(i+k-1,j+k-1));
int ans = 0;
rep1(i,k,n)
rep1(j,i+k,n){
if (j+k>n) continue;
ans = max(ans,a[i][m]+maxh[j]+c[j+1][m]);
}
rep1(i,k,m)
rep1(j,i+k,m){
if (j+k>m) continue;
ans = max(ans,a[n][i]+maxl[j]+d[1][j+1]);
}
rep1(i,k,n-k+1)
rep1(j,k,m-k+1){
ans = max(ans,a[i][j]+b[i][j+1]+c[i+1][m]);
ans = max(ans,a[i][m]+c[i+1][j]+d[i+1][j+1]);
ans = max(ans,a[i][j]+b[n][j+1]+c[i+1][j]);
ans = max(ans,a[n][j]+b[i][j+1]+d[i+1][j+1]);
}
printf("%d\n",ans);
return 0;
}
【BZOJ 1177】 [Apio2009]Oil的更多相关文章
- 【BZOJ 1177】【APIO 2009】Oil
http://www.lydsy.com/JudgeOnline/problem.php?id=1177 前缀和优化,时间复杂度$O(nm)$ 因为数据不全,快速读入会导致RE,切记! #includ ...
- 【BZOJ 1179】[Apio2009]Atm
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] tarjan强连通缩点一下. 然后把缩点之后,每个点的钱的数累加起来. 然后从S出发 开始一边做bfs一遍做dp. 最后输出有酒吧的 ...
- 【BZOJ 1150】 1150: [CTSC2007]数据备份Backup (贪心+优先队列+双向链表)
1150: [CTSC2007]数据备份Backup Description 你在一家 IT 公司为大型写字楼或办公楼(offices)的计算机数据做备份.然而数据备份的工作是枯燥乏味 的,因此你想设 ...
- Kruskal算法及其类似原理的应用——【BZOJ 3654】tree&&【BZOJ 3624】[Apio2008]免费道路
首先让我们来介绍Krukal算法,他是一种用来求解最小生成树问题的算法,首先把边按边权排序,然后贪心得从最小开始往大里取,只要那个边的两端点暂时还没有在一个联通块里,我们就把他相连,只要这个图里存在最 ...
- 【BZOJ 2957】楼房重建&&Codechef COT5 Count on a Treap&&【NOIP模拟赛】Weed 线段树的分治维护
线段树是一种作用于静态区间上的数据结构,可以高效查询连续区间和单点,类似于一种静态的分治.他最迷人的地方在于“lazy标记”,对于lazy标记一般随我们从父区间进入子区间而下传,最终给到叶子节点,但还 ...
- LCA 【bzoj 4281】 [ONTAK2015]Związek Harcerstwa Bajtockiego
[bzoj 4281] [ONTAK2015]Związek Harcerstwa Bajtockiego Description 给定一棵有n个点的无根树,相邻的点之间的距离为1,一开始你位于m点. ...
- 【BZOJ 1191】 [Apio2010]特别行动队 (斜率优化)
dsy1911: [Apio2010]特别行动队 [题目描述] 有n个数,分成连续的若干段,每段的分数为a*x^2+b*x+c(a,b,c是给出的常数),其中x为该段的各个数的和.求如何分才能使得各个 ...
- 【BZOJ 1096】 [ZJOI2007]仓库建设 (斜率优化)
1096: [ZJOI2007]仓库建设 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 3940 Solved: 1736 Description ...
- 【BZOJ 2132】圈地计划 && 【7.22Test】计划
两种版本的题面 Description 最近房地产商GDOI(Group of Dumbbells Or Idiots)从NOI(Nuts Old Idiots)手中得到了一块开发土地.据了解,这块土 ...
随机推荐
- ansible 连通测试
[root@ftp:/root] > ansible ansible01 -m ping ansible01 | UNREACHABLE! => { "changed" ...
- Python基本类型操作
# str = "2017.1.1.wmv" # #print(str[str.rfind('.'):]) # #print(str.count(".")) # ...
- CSDN开博一周年--总结、感想和未来规划
2012年9月22日,我在CSDN发表了第1篇博文-为了忘却的纪念,我的天龙游戏生涯.本文讲述了我大学期间玩网络游戏-天龙八部的故事. 在大学期间,实际上我也有自己的帐号-huoyingfans,主要 ...
- Spring配置文件中指定init-method属性的作用
bean 配置文件属性 init-method 用于在bean初始化时指定执行方法,用来替代继承 InitializingBean接口.相关链接:https://www.cnblogs.com/Joe ...
- FastDFS 实现图片上传_01
一.jar 包 jar包下载:https://pan.baidu.com/s/1nwkAHU5 密码:tlv6 或者 下载工程,安装到 maven 本地仓库 工程下载:https://pan.baid ...
- NoReferencedTableError: Foreign key associated with column ** with which to generate a foreign key to target column 'id'
1.使用 python flask 框架做项目时,在实体类中配置了 映射关系, message: id = db.Column(db.Integer, primary_key=True)message ...
- Redis windows版本的启停bat脚本命令
Reids windows版本安装 redis windows官网推荐:https://github.com/MicrosoftArchive/redis/releases 下载解压即可. 启停bat ...
- HTML页面直接显示json 结构
<html> <head> <meta http-equiv="Content-Type" content="text/html; char ...
- C. Amr and Chemistry(Codeforces Round #312 (Div. 2) 二进制+暴力)
C. Amr and Chemistry time limit per test 1 second memory limit per test 256 megabytes input standard ...
- 数据结构与算法系列----最小生成树(Prim算法&Kruskal算法)
一:Prim算法 1.概览 普里姆算法(Prim算法).图论中的一种算法.可在加权连通图里搜索最小生成树.意即由此算法搜索到的边子集所构成的树中.不但包含了连通图里的全部顶点(英语:Ve ...