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

参考:https://blog.csdn.net/FAreStorm/article/details/49200383

没有技术含量但是难想难写,枚举情况图详见参考blog懒得画了

#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
const int N=1505;
int n,m,k,a[N][N],b[N][N],c[N][N],d[N][N],s[N][N],p[N][N],h[N][N],l[N][N],mxh[N],mxl[N],ans;
int read()
{
    int r=0,f=1;
    char p=getchar();
    while(p>‘9‘||p<‘0‘)
    {
        if(p==‘-‘)
            f=-1;
        p=getchar();
    }
    while(p>=‘0‘&&p<=‘9‘)
    {
        r=r*10+p-48;
        p=getchar();
    }
    return r*f;
}
int main()
{
    n=read(),m=read(),k=read();
    for(int i=1;i<=n;i++)
        for(int j=1;j<=m;j++)
            s[i][j]=s[i-1][j]+s[i][j-1]-s[i-1][j-1]+read();
    for(int i=k;i<=n;i++)
        for(int j=k;j<=m;j++)
            p[i][j]=s[i][j]-s[i-k][j]-s[i][j-k]+s[i-k][j-k],a[i][j]=max(p[i][j],max(a[i-1][j],a[i][j-1]));
    for(int i=k;i<=n;i++)
        for(int j=m-k+1;j>=1;j--)
            b[i][j]=max(p[i][j+k-1],max(b[i-1][j],b[i][j+1]));
    for(int i=n-k+1;i>=1;i--)
        for(int j=k;j<=m;j++)
            c[i][j]=max(p[i+k-1][j],max(c[i+1][j],c[i][j-1]));
    for(int i=n-k+1;i>=1;i--)
        for(int j=m-k+1;j>=1;j--)
            d[i][j]=max(p[i+k-1][j+k-1],max(d[i+1][j],d[i][j+1]));
    for(int i=1;i<=n;i++)
        for(int j=1;j<=m;j++)
            mxh[i]=max(mxh[i],p[i][j]),mxl[j]=max(mxl[j],p[i][j]);
    for(int i=1;i<=n;i++)
    {
        h[i][i+k-1]=mxh[i+k-1];
        for(int j=i+k;j<=n;j++)
            h[i][j]=max(h[i][j-1],mxh[j]);
    }
    for(int i=1;i<=m;i++)
    {
        l[i][i+k-1]=mxl[i+k-1];
        for(int j=i+k;j<=m;j++)
            l[i][j]=max(l[i][j-1],mxl[j]);
    }
    for(int i=k;i<=n-k+1;i++)
        for(int j=k;j<=m-k+1;j++)
            ans=max(ans,max(max(a[i][j]+c[i+1][j]+l[j+1][m],l[1][j]+b[i][j+1]+d[i+1][j+1]),max(a[i][j]+b[i][j+1]+h[i+1][n],h[1][i]+c[i+1][j]+d[i+1][j+1])));
    for(int i=k;i<=n-k+1;i++)
        for(int j=i+k-1;j<=n-k+1;j++)
            ans=max(ans,h[1][i-1]+h[i][j]+h[j+1][n]);
    for(int i=k;i<=m-k+1;i++)
        for(int j=i+k-1;j<=m-k+1;j++)
            ans=max(ans,l[1][i-1]+l[i][j]+l[j+1][n]);
    printf("%d\n",ans);
    return 0;
}

原文地址:https://www.cnblogs.com/lokiii/p/8799063.html

时间: 2024-10-20 02:45:09

洛谷 P3625 [APIO2009]采油区域【枚举】的相关文章

洛谷P3625 - [APIO2009]采油区域

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]\)

[APIO2009]采油区域

https://zybuluo.com/ysner/note/1144701 题面 给出一个\(n×m\)的矩阵.请在其中选择\(3\)个互不相交的,大小恰为\(k×k\) 的子矩阵,使得子矩阵的权值和最大. \(n\leq1500,m\leq1500\) 解析 这题和CJOJ2501很像呢... 看到题,本能地打了一个\(DP\),然后至今调不出来... 解法一 矩阵对应端点为其右下方端点,\(S[i][j]\)即为其面积. \(f[i][j]\)表示选择\((i,j)\)这个点对应矩阵,并且

洛谷3627 [APIO2009]抢掠计划

题目描述 输入格式: 第一行包含两个整数 N.M.N 表示路口的个数,M 表示道路条数.接下来 M 行,每行两个整数,这两个整数都在 1 到 N 之间,第 i+1 行的两个整数表示第 i 条道路的起点和终点的路口编号.接下来 N 行,每行一个整数,按顺序表示每 个路口处的 ATM 机中的钱数.接下来一行包含两个整数 S.P,S 表示市中心的 编号,也就是出发的路口.P 表示酒吧数目.接下来的一行中有 P 个整数,表示 P 个有酒吧的路口的编号. 输出格式: 输出一个整数,表示 Banditji

洛谷 P1461海明码 Hamming Codes 枚举 搜索

洛谷 P1461海明码 Hamming Codes枚举 搜索 1 #include <bits/stdc++.h> 2 using namespace std ; 3 4 const int N = 11 ; 5 int mx,B,n,D ; 6 int bin[N] ; 7 struct base{ 8 bool f[ N ] ; 9 inline void clear() { 10 for(int i=1;i<N;i++) f[ i ] = 0 ; 11 } 12 inline vo

洛谷P2327 [SCOI2005]扫雷 枚举 搜索

洛谷P2327 [SCOI2005]扫雷 枚举 搜索 对搜索的 一些优化 其实我们只要枚举第一行是否有地雷,根据第1行探测出的地雷数,就可以推出第二行是否有地雷 然后在根据第二行探测地雷数推出第三行的情况,这样以此类推,一直推到第 n-1 的探测结果,然后 推出第 n 行是否有地雷如果在推的过程中 使得当前的探测地雷数为 负数 ,说明这个方法是萎的, 或者这一行推完了之后,还是有雷,那也退出,最后还要判断一下第 n 行是否有地雷 1 #include <cstdio> 2 #include &

洛谷P1726 上白泽慧音

P1726 上白泽慧音 124通过 343提交 题目提供者yeszy 标签图论 难度提高+/省选- 提交该题 讨论 题解 记录 最新讨论 给两组数据吧! 题目描述 在幻想乡,上白泽慧音是以知识渊博闻名的老师.春雪异变导致人间之里的很多道路都被大雪堵塞,使有的学生不能顺利地到达慧音所在的村庄.因此慧音决定换一个能够聚集最多人数的村庄作为新的教学地点.人间之里由N个村庄(编号为1..N)和M条道路组成,道路分为两种一种为单向通行的,一种为双向通行的,分别用1和2来标记.如果存在由村庄A到达村庄B的通

洛谷P1784 数独

To 洛谷.1784 数独(类似(或者说相同)题:CODEVS.4966 简单数独(4*4数独) CODEVS.2924 数独挑战) 题目描述 数独是根据9×9盘面上的已知数字,推理出所有剩余空格的数字,并满足每一行.每一列.每一个粗线宫内的数字均含1-9,不重复.每一道合格的数独谜题都有且仅有唯一答案,推理方法也以此为基础,任何无解或多解的题目都是不合格的. 芬兰一位数学家号称设计出全球最难的“数独游戏”,并刊登在报纸上,让大家去挑战. 这位数学家说,他相信只有“智慧最顶尖”的人才有可能破解这

洛谷1003 铺地毯 解题报告

洛谷1003 铺地毯 本题地址:http://www.luogu.org/problem/show?pid=1003 题目描述 为了准备一个独特的颁奖典礼,组织者在会场的一片矩形区域(可看做是平面直角坐标系的第一象限)铺上一些矩形地毯.一共有 n 张地毯,编号从 1 到n .现在将这些地毯按照编号从小到大的顺序平行于坐标轴先后铺设,后铺的地毯覆盖在前面已经铺好的地毯之上. 地毯铺设完成后,组织者想知道覆盖地面某个点的最上面的那张地毯的编号.注意:在矩形地毯边界和四个顶点上的点也算被地毯覆盖. 输

【洛谷P2704【NOI2001】】炮兵阵地

题目描述 司令部的将军们打算在N*M的网格地图上部署他们的炮兵部队.一个N*M的地图由N行M列组成,地图的每一格可能是山地(用"H" 表示),也可能是平原(用"P"表示),如下图.在每一格平原地形上最多可以布置一支炮兵部队(山地上不能够部署炮兵部队):一支炮兵部队在地图上的攻击范围如图中黑色区域所示: 如果在地图中的灰色所标识的平原上部署一支炮兵部队,则图中的黑色的网格表示它能够攻击到的区域:沿横向左右各两格,沿纵向上下各两格.图上其它白色网格均攻击不到.从图上可见