P3625 [APIO2009]采油区域(前缀和)

前缀和的好题。

考虑将矩形分成三部分有多少情况。

一共只有六种。

然后就是预处理4个角的最大值前缀和值,和从第i行到第j行的最大前缀和值,第i列到第j列的最大前缀和值。

一般矩形范围在n,m≤103n,m\le 10^3n,m≤103的,显然就是O(nm)O(nm)O(nm)的解法。

时间复杂度:O(nm)O(nm)O(nm)

// Problem: P3625 [APIO2009]采油区域
// Contest: Luogu
// URL: https://www.luogu.com.cn/problem/P3625
// Memory Limit: 125 MB
// Time Limit: 1500 ms
// Date: 2021-08-24 14:24:53
// --------by Herio--------#include<bits/stdc++.h>
using namespace std;int read() {char ch=getchar();int f=1,x=0;while(ch<'0'||ch>'9') {if(ch=='-')f=-1;ch=getchar();}while(ch>='0'&&ch<='9') {x=x*10+ch-'0';ch=getchar();}return f*x;
}const int MAXN=15e2+10; int n,m,k,ans;
int sum[MAXN][MAXN],a[MAXN][MAXN];
int lu[MAXN][MAXN],ld[MAXN][MAXN],rd[MAXN][MAXN],ru[MAXN][MAXN],hor[MAXN][MAXN],ver[MAXN][MAXN];int gets(int x,int y,int a,int b) {return sum[a][b]+sum[x-1][y-1]-sum[x-1][b]-sum[a][y-1];//用 sum 计算一个子矩阵中的数字和
}signed main() {cin>>n>>m>>k;for(int i=1;i<=n;i++) {for(int j=1;j<=m;j++) {a[i][j]=read();sum[i][j]=sum[i-1][j]+sum[i][j-1]-sum[i-1][j-1]+a[i][j];}}for(int i=k;i<=n;i++) {for(int j=k;j<=m;j++) {lu[i][j]=max(max(lu[i][j-1],lu[i-1][j]),gets(i-k+1,j-k+1,i,j));}}for(int i=k;i<=n;i++) {for(int j=m-k+1;j;j--) {ru[i][j]=max(max(ru[i][j+1],ru[i-1][j]),gets(i-k+1,j,i,j+k-1));}}for(int i=n-k+1;i;i--) {for(int j=1;j<=m;j++) {ld[i][j]=max(max(ld[i][j-1],ld[i+1][j]),gets(i,j-k+1,i+k-1,j));}}for(int i=n-k+1;i;i--) {for(int j=m-k+1;j;j--) {rd[i][j]=max(max(rd[i][j+1],rd[i+1][j]),gets(i,j,i+k-1,j+k-1));}}for(int i=1;i<=n-k+1;i++) {for(int j=1;j<=m-k+1;j++) {hor[i][i+k-1]=max(hor[i][i+k-1],gets(i,j,i+k-1,j+k-1));}}for(int len=k+1;len<=n;len++) {for(int i=1,j=i+len-1;j<=n;j++,i++) {hor[i][j]=max(hor[i+1][j],hor[i][j-1]);}}for(int i=1;i<=m-k+1;i++) {for(int j=1;j<=n-k+1;j++) {ver[i][i+k-1]=max(ver[i][i+k-1],gets(j,i,j+k-1,i+k-1));}}for(int len=k+1;len<=m;len++) {for(int i=1,j=i+len-1;j<=m;j++,i++) {ver[i][j]=max(ver[i+1][j],ver[i][j-1]);}}//预处理for(int i=1;i<=n;i++) {for(int j=1;j<=m;j++) {ans=max(ans,hor[i+1][n]+lu[i][j]+ru[i][j+1]);ans=max(ans,hor[1][i]+ld[i+1][j]+rd[i+1][j+1]);ans=max(ans,ver[j+1][m]+lu[i][j]+ld[i+1][j]);ans=max(ans,ver[1][j]+ru[i][j+1]+rd[i+1][j+1]);}}for(int i=1;i<=n;i++) {for(int j=i+1;j<=n;j++) {ans=max(ans,hor[1][i]+hor[i+1][j]+hor[j+1][n]);}}for(int i=1;i<=m;i++) {for(int j=1;j<=m;j++) {ans=max(ans,ver[1][i]+ver[i+1][j]+ver[j+1][m]);}}//计算答案cout<<ans<<endl;return 0;
}

来归纳下,如果分成222份,就是切一刀,显然只需预处理两个数组即可。

分成4份,原做法复杂度会爆炸,因为枚举的东西不止二维。

P3625 [APIO2009]采油区域(前缀和)相关推荐

  1. P3625 [APIO2009]采油区域 题解

    这道题是一道很好的二位前缀和问题. 然而码量有点大. 下面规定 nnn 表示行,mmm 表示列,n,mn,mn,m 同阶. 即计算复杂度的时候视 O(nm)O(nm)O(nm) 为 O(n2)O(n^ ...

  2. 采油区域 前缀和+DP

    算法训练  采油区域     时间限制:2.0s     内存限制:512.0MB         采油区域 Siruseri政府决定将石油资源丰富的Navalur省的土地拍卖给私人承包商以建立油井. ...

  3. 采油区域java_[APIO2009]采油区域

    ##题面 给出一个$n×m$的矩阵.请在其中选择$3$个互不相交的,大小恰为$k×k$ 的子矩阵,使得子矩阵的权值和最大. $n\leq1500,m\leq1500$ ##解析 这题和CJOJ2501 ...

  4. luoguP3625 APIO2009 采油区域

    题面 题面 题解 套路题. 我第一想法是设f[i][j][k]f[i][j][k]f[i][j][k]为(1,1)−(i,j)(1,1)-(i,j)(1,1)−(i,j)的矩阵里,选了k个子矩阵,且最 ...

  5. [APIO2009]采油区域 题解

    这是本蒟蒻的第一篇紫题题解 题目传送门 这是一道比较考细节的题目 经读题可知要求一个矩阵三个边长为 kkk 子矩阵的和的最大值值,因为要求子矩阵,所以我们可以采用二维前缀和. 我们可以发现这个边长为 ...

  6. Luogu 3625 [APIO2009]采油区域

    想了很久的dp,看了一眼题解之后感觉自己被安排了. 发现从一个矩形中选择三个不相交的正方形一共只有六种取法. 那么我们可以处理出四个值: $f_{i, j}$分别表示以$(i, j)$为右下角,左下角 ...

  7. 蓝桥杯:试题 算法训练 采油区域 矩阵前缀和+动态规划+分治+枚举

    资源限制 时间限制:2.0s 内存限制:512.0MB 采油区域 Siruseri政府决定将石油资源丰富的Navalur省的土地拍卖给私人承包商以建立油井.被拍卖的整块土地为一个矩形区域,被划分为M× ...

  8. acmore|acmore.cc1211采油区域1212会议中心1213抢掠计划APIO2009

    采油区域: #include <iostream> #include <algorithm> #include <cstdio> #include <cstd ...

  9. Java实现 蓝桥杯VIP 算法训练 采油区域

    算法训练 采油区域 时间限制:2.0s 内存限制:512.0MB 提交此题 查看参考代码 采油区域 Siruseri政府决定将石油资源丰富的Navalur省的土地拍卖给私人承包商以建立油井.被拍卖的整 ...

最新文章

  1. Android学习笔记43:XML文件解析(Pull方式)
  2. Linux下的rsync远程增量备份详解
  3. java 安装报错2503_Windows安装Node.js报错:2503、2502的解决方法
  4. VTK:网格之CellEdges
  5. 分布式项目 cookie共享方案
  6. bocketmq 多个消费者同时_菜鸟开建“海南跨境物流枢纽”让自贸港消费者海购最快当日达...
  7. php图片显示框,【转】php让图片弹出下载框的方法
  8. 还在集什么五福,史上最惨锦鲤再次来袭!奖品堪比5年高考3年模拟!
  9. linux恢复终端默认配置,以gnome-terminal为例,修改gnome3 的默认配置,
  10. SQL2000触发器
  11. TCP/IP四层模型与OSI七层模型
  12. Authlib OAuth2.0
  13. 看见的力量 – (II) 影响地图
  14. day22 正则表达式 re
  15. Linux 网络命令 ip、ifconfig
  16. The app references non-public selectors in payload With Xcode6.1
  17. python while 循环 全局变量_python循环语句(while amp; for)
  18. udp buffer 和reassemble buffer
  19. document.writeln
  20. RK3288 EDP 调试

热门文章

  1. PHP重定向SEO,PHP类网站301重定向实战站长SEO必修课
  2. 摇摇开门:支付宝的痼疾、做产品与谈恋爱
  3. JavaScript常用正则判断(待续...)
  4. SqlServer 获取当年时间的时间戳
  5. 计算机校本培训心得,2016信息技术校本研修心得体会
  6. 华为设备静态路由配置
  7. 七月算法机器学习笔记8 聚类算法
  8. 循环神经网络:用训练好的model写诗歌
  9. Sentinel 为 RocketMQ 服务保驾护航
  10. 电力电子系统的保护设计