Portal

Description

给出一个\(n\times m(n,m\leq1500)\)的矩阵,从中选出\(3\)个互不相交的\(k\times k\)方阵,使得被选出的数的和最大。

Solution

奇怪做法...



三个矩形分别在三个部分中,把矩形划分成三部分只有这六种。首先搞出\(s[i][j]\)表示以\((i,j)\)为右下角的\(k\times k\)方阵的和,然后搞出\(f_1[i][j]\)表示\((1,1)-(i,j)\)中\(s\)的最大值,\(f_2[i][j]\)表示\((1,m)-(i,j)\)中\(s\)的最大值,\(f_3[i][j]\)表示\((n,m)-(i,j)\)中\(s\)的最大值,\(f_4[i][j]\)表示\((n,1)-(i,j)\)中\(s\)的最大值。枚举横竖划分在哪就可以解决四种。

平行的那两种搞出行/列最大值然后瞎搞即可。

时间复杂度\(O(nm)\)。

Code

//[APIO2009]Oil
#include <cstdio>
const int N=2000;
inline int max(int x,int y) {return x>y?x:y;}
int n,m,k,a[N][N];
int pre[N][N],s[N][N],f1[N][N],f2[N][N],f3[N][N],f4[N][N],row[N],col[N];
int main()
{
scanf("%d%d%d",&n,&m,&k);
int ans;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
scanf("%d",&a[i][j]);
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
pre[i][j]=pre[i-1][j]+pre[i][j-1]-pre[i-1][j-1]+a[i][j];
for(int i=k;i<=n;i++)
for(int j=k;j<=m;j++)
s[i][j]=pre[i][j]-pre[i-k][j]-pre[i][j-k]+pre[i-k][j-k];
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
f1[i][j]=max(s[i][j],max(f1[i-1][j],f1[i][j-1]));
for(int i=1;i<=n;i++)
for(int j=m;j>=1;j--)
f2[i][j]=max(s[i][j+k-1],max(f2[i-1][j],f2[i][j+1]));
for(int i=n;i>=1;i--)
for(int j=m;j>=1;j--)
f3[i][j]=max(s[i+k-1][j+k-1],max(f3[i+1][j],f3[i][j+1]));
for(int i=n;i>=1;i--)
for(int j=1;j<=m;j++)
f4[i][j]=max(s[i+k-1][j],max(f4[i+1][j],f4[i][j-1]));
for(int i=k;i<=n-k;i++)
for(int j=k;j<=m-k;j++)
{
ans=max(ans,f1[i][j]+f2[i][j+1]+f3[i+1][1]); //┴
ans=max(ans,f2[i][j+1]+f3[i+1][j+1]+f4[1][j]); //├
ans=max(ans,f3[i+1][j+1]+f4[i+1][j]+f1[i][m]); //┬
ans=max(ans,f4[i+1][j]+f1[i][j]+f2[n][j+1]); //┤
}
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
row[i]=max(row[i],s[i][j]),col[j]=max(col[j],s[i][j]);
for(int i=k;i<=n-k-k;i++)
for(int j=i+k,mid=row[j];j<=n-k;j++,mid=max(mid,row[j]))
ans=max(ans,f1[i][m]+mid+f3[j+1][1]);
for(int i=k;i<=n-k-k;i++)
for(int j=i+k,mid=col[j];j<=n-k;j++,mid=max(mid,col[j]))
ans=max(ans,f1[n][i]+mid+f3[1][j+1]);
printf("%d\n",ans);
return 0;
}

P.S.

写的我好难受...

洛谷P3625 - [APIO2009]采油区域的更多相关文章

  1. [SOJ #686]抢救(2019-11-7考试)/[洛谷P3625][APIO2009]采油区域

    题目大意 有一个\(n\times m\)的网格,\((x,y)\)权值为\(a_{x,y}\),要求从中选取三个不相交的\(k\times k\)的正方形使得它们权值最大.\(n,m,k\leqsl ...

  2. 洛谷 P3625 [APIO2009]采油区域【枚举】

    参考:https://blog.csdn.net/FAreStorm/article/details/49200383 没有技术含量但是难想难写,枚举情况图详见参考blog懒得画了 bzoj蜜汁TTT ...

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

    这道题用二维前缀和可以做 难度还不算高,细节需要注意 调试了很久…… 主要是细节太多了 #include<bits/stdc++.h> using namespace std; #defi ...

  4. bzoj1177&p3625 [APIO2009]采油区域p[大力讨论]

    我好菜菜啊. 给定矩形,从中选出三个边长K的正方形互不重叠,使得覆盖到的数总和最大. 想的时候往dp上钻去了..结果一开始想了一个错的dp,像这样 /************************* ...

  5. BZOJ1178或洛谷3626 [APIO2009]会议中心

    BZOJ原题链接 洛谷原题链接 第一个问题是经典的最多不相交区间问题,用贪心即可解决. 主要问题是第二个,求最小字典序的方案. 我们可以尝试从\(1\to n\)扫一遍所有区间,按顺序对每一个不会使答 ...

  6. BZOJ1179或洛谷3672 [APIO2009]抢掠计划

    BZOJ原题链接 洛谷原题链接 在一个强连通分量里的\(ATM\)机显然都可被抢,所以先用\(tarjan\)找强连通分量并缩点,在缩点的后的\(DAG\)上跑最长路,然后扫一遍酒吧记录答案即可. # ...

  7. 【题解】洛谷P3627 [APIO2009]抢掠计划(缩点+SPFA)

    洛谷P3627:https://www.luogu.org/problemnew/show/P3627 思路 由于有强连通分量 所以我们可以想到先把整个图缩点 缩点完之后再建一次图 把点权改为边权 并 ...

  8. [APIO2009]采油区域

    题目描述 Siruseri 政府决定将石油资源丰富的 Navalur 省的土地拍卖给私人承包商以 建立油井.被拍卖的整块土地为一个矩形区域,被划分为 M×N 个小块. Siruseri 地质调查局有关 ...

  9. 洛谷 P3627 [APIO2009]抢掠计划

    这题一看就是缩点,但是缩完点怎么办呢?首先我们把所有的包含酒吧的缩点找出来,打上标记,然后建立一张新图, 每个缩点上的点权就是他所包含的所有点的点权和.但是建图的时候要注意,每一对缩点之间可能有多条边 ...

随机推荐

  1. GWT-2.5.1离线安装

    GWT官方离线包下载地址 http://dl.google.com/eclipse/plugin/3.7/zips/gpe-e37-latest-updatesite.zip 以下是GWTDesign ...

  2. java static block

    java 中 静态块的作用 (一)java 静态代码块 静态方法区别一般情况下,如果有些代码必须在项目启动的时候就执行的时候,需要使用静态代码块,这种代码是主动执行的;需要在项目启动的时候就初始化,在 ...

  3. Cenos7—安装

    1. 进入安装界面 2. 选择语言 3. 进行分区 4. 设置root密码

  4. 完整的.h宏定义

    ##封装中的要点 __declspec(dllexport) 表明函数为导出函数 * `extern "C"` 导出的函数名与声明一致,否则导出函数名无法正常使用 当然,也可以通过 ...

  5. PAT (Basic Level) Practise (中文)- 1007. 素数对猜想 (20)

    http://www.patest.cn/contests/pat-b-practise/1007 让我们定义 dn 为:dn = pn+1 - pn,其中 pi 是第i个素数.显然有 d1=1 且对 ...

  6. fiddler 模拟发送post请求

    打开fiddler,选择在右边的Composer工具栏,打开Parsed选项,然后数据发送协议,例如选择POST, POST右边输入框可以输入访问地址, 下方的输入框可以输入发送的输入操作,例如发送的 ...

  7. 洛谷 P1516 青蛙的约会

    https://www.luogu.org/problemnew/show/P1516#sub 题意还是非常好理解的..... 假如这不是一道环形的跑道而是一条直线,你会怎样做呢? 如果是我就会列一个 ...

  8. PHP实现同array_column一样的功能

    不用PHP自带的array_column函数实现同样的功能 <?php /** * Created by PhpStorm. * User: 123456 * Date: 2018/9/25 * ...

  9. linux中怎样关闭ICMP回应功能

    引用自:http://blog.csdn.net/qq844352155/article/details/49700121 linux中怎样关闭ICMP回应功能   输入:   echo 1 > ...

  10. 第7课 Thinkphp 5 模板输出变量使用函数 Thinkphp5商城第四季

    目录 1. 手册地址: 2. 如果前面输出的变量在后面定义的函数的第一个参数,则可以直接使用 3. 还可以支持多个函数过滤,多个函数之间用"|"分割即可,例如: 4. 变量输出使用 ...