1177: [Apio2009]Oil

Time Limit: 15 Sec  Memory Limit: 162 MB
Submit: 1477  Solved: 589
[Submit]

Description

采
油区域
Siruseri政府决定将石油资源丰富的Navalur省的土地拍卖给私人承包商以建立油井。被拍卖的整块土地为一个矩形区域,被划分为M×N个小块。
Siruseri地质调查局有关于Navalur土地石油储量的估测数据。这些数据表示为M×N个非负整数,即对每一小块土地石油储量的估计值。
为了避免出现垄断,政府规定每一个承包商只能承包一个由K×K块相连的土地构成的正方形区域。
AoE石油联合公司由三个承包商组成,他们想选择三块互不相交的K×K的区域使得总的收益最大。 例如,假设石油储量的估计值如下: 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 8 8 8 8 8 1 1 1 1 8 8 8 8 8 1 1 1 1 8 8 8 8
8 1 1 1 1 1 1 1 8 8 8 1 1 1 1 1 1 1 1 8 8 8 1 1 1 1 1 1 9 9 9 1 1 1 1 1
1 9 9 9 如果K = 2, AoE公司可以承包的区域的石油储量总和为100, 如果K = 3,
AoE公司可以承包的区域的石油储量总和为208。 AoE公司雇佣你来写一个程序,帮助计算出他们可以承包的区域的石油储量之和的最大值。

Input

输入第一行包含三个整数M, N, K,其中M和N是矩形区域的行数和列数,K是每一个承包商承包的正方形的大小(边长的块数)。接下来M行,每行有N个非负整数表示这一行每一小块土地的石油储量的估计值

Output

输出只包含一个整数,表示AoE公司可以承包的区域的石油储量之和的最大值。

Sample Input

9 9 3
1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1
1 8 8 8 8 8 1 1 1
1 8 8 8 8 8 1 1 1
1 8 8 8 8 8 1 1 1
1 1 1 1 8 8 8 1 1
1 1 1 1 1 1 8 8 8
1 1 1 1 1 1 9 9 9
1 1 1 1 1 1 9 9 9

Sample Output

208
  
  这道题很妙啊,其实只要分类讨论就可以了。
 #include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
const int maxn=;
int Ul[maxn][maxn],Ur[maxn][maxn];
int Dl[maxn][maxn],Dr[maxn][maxn];
int a[maxn][maxn]; int sum(int x,int y,int k)
{
if(x<k||y<k)return ;
return a[x][y]-a[x-k][y]-a[x][y-k]+a[x-k][y-k];
} void Pre_Solve(int R,int C,int K)
{
for(int i=K;i<=R;i++)
for(int j=K;j<=C;j++){
int S=sum(i,j,K);
Ul[i][j]=S;
Ur[i][j-K+]=S;
Dl[i-K+][j]=S;
Dr[i-K+][j-K+]=S;
} for(int i=;i<=R;i++)
for(int j=;j<=C;j++)
Ul[i][j]=max(Ul[i][j],max(Ul[i-][j],Ul[i][j-])); for(int i=;i<=R;i++)
for(int j=C;j>=;j--)
Ur[i][j]=max(Ur[i][j],max(Ur[i-][j],Ur[i][j+])); for(int i=R;i>=;i--)
for(int j=;j<=C;j++)
Dl[i][j]=max(Dl[i][j],max(Dl[i+][j],Dl[i][j-])); for(int i=R;i>=;i--)
for(int j=C;j>=;j--)
Dr[i][j]=max(Dr[i][j],max(Dr[i+][j],Dr[i][j+]));
}
int ans=;
void Solve(int R,int C,int K)
{
for(int i=;i<=R;i++){
for(int j=;j<=C;j++){
ans=max(ans,Ul[i][C]+Dl[i+][j]+Dr[i+][j+]);
ans=max(ans,Ul[i][j]+Ur[i][j+]+Dr[i+][]);
ans=max(ans,Ul[i][j]+Dl[i+][j]+Dr[][j+]);
ans=max(ans,Ul[R][j]+Ur[i][j+]+Dr[i+][j+]);
}
}
for(int i=*K;i<R;i++){
int MaxS=;
for(int j=;j<=C;j++)
MaxS=max(MaxS,sum(i,j,K));
ans=max(ans,Ul[i-K][C]+MaxS+Dr[i+][]);
}
for(int j=*K;j<C;j++){
int MaxS=;
for(int i=;i<=R;i++)
MaxS=max(MaxS,sum(i,j,K));
ans=max(ans,Ul[R][j-K]+MaxS+Dr[][j+]);
}
}
int main()
{
#ifndef ONLINE_JUDGE
freopen("oil.in","r",stdin);
freopen("oil.out","w",stdout);
#endif
int R,C,K;
scanf("%d%d%d",&R,&C,&K);
for(int i=;i<=R;i++)
for(int j=;j<=C;j++){
scanf("%d",&a[i][j]);
a[i][j]+=a[i-][j]+a[i][j-]-a[i-][j-];
}
Pre_Solve(R,C,K);
Solve(R,C,K);
printf("%d\n",ans);
}
 

枚举(分类讨论):BZOJ 1177: [Apio2009]Oil的更多相关文章

  1. BZOJ 1177 [Apio2009]Oil(递推)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=1177 [题目大意] 给出一个矩阵,从中选出3个k*k且不相交的矩阵,使得其总和最大 [ ...

  2. [BZOJ]1177: [Apio2009]Oil

    题目大意:给出一个n*m的矩阵,选出3个不相交的k*k子矩阵,使得子矩阵中元素和最大.(k<=n,m<=1500) 思路:选出的子矩阵有3种情况:横着排三个.竖着排三个.三角状分布(其中有 ...

  3. BZOJ1177:[APIO2009]Oil(枚举,前缀和)

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

  4. BZOJ 1067 降雨量(RMQ-ST+有毒的分类讨论)

    1067: [SCOI2007]降雨量 Time Limit: 1 Sec  Memory Limit: 162 MB Submit: 4399  Solved: 1182 [Submit][Stat ...

  5. bzoj 3779 重组病毒 好题 LCT+dfn序+线段树分类讨论

    题目大意 1.将x到当前根路径上的所有点染成一种新的颜色: 2.将x到当前根路径上的所有点染成一种新的颜色,并且把这个点设为新的根: 3.查询以x为根的子树中所有点权值的平均值. 分析 原题codec ...

  6. Codeforces 460D Little Victor and Set --分类讨论+构造

    题意:从区间[L,R]中选取不多于k个数,使这些数异或和尽量小,输出最小异或和以及选取的那些数. 解法:分类讨论. 设选取k个数. 1. k=4的时候如果区间长度>=4且L是偶数,那么可以构造四 ...

  7. [BZOJ1177][Apio2009]Oil

    [BZOJ1177][Apio2009]Oil 试题描述 采油区域 Siruseri政府决定将石油资源丰富的Navalur省的土地拍卖给私人承包商以建立油井.被拍卖的整块土地为一个矩形区域,被划分为M ...

  8. Bzoj4558:分类讨论 计算几何 组合数学

    国际惯例的题面: 这题让我爆肝啦......这种计数显然容斥,正好不含任何坏点的我们不会算,但是我们能算至少含零个坏点的,至少含一个坏点的,至少含两个坏点的......所以最终的答案就是(至少含零个坏 ...

  9. HDU 5203 Rikka with wood sticks 分类讨论

    题目链接: hdu:http://acm.hdu.edu.cn/showproblem.php?pid=5203 bc(chinese):http://bestcoder.hdu.edu.cn/con ...

随机推荐

  1. HDU 4288 Coder(线段树)

    题意: 给定三种操作 1. add x 向序列中添加x,添加之后序列还保持有序 2. del x  删除序列中值为x的元素 3. sum  求下边模5等于3的元素和 思路: 直接暴力也可以过,就是看暴 ...

  2. poj 3463 Sightseeing(次短路+条数统计)

    /* 对dij的再一次理解 每个点依旧永久标记 只不过这里多搞一维 0 1 表示最短路还是次短路 然后更新次数相当于原来的两倍 更新的时候搞一下就好了 */ #include<iostream& ...

  3. codevs1506传话(kosaraju算法)

    - - - - - - - - 一个()打成[] 看了一晚上..... /* 求强连通分量 kosaraju算法 边表存图 正反构造两个图 跑两边 分别记下入栈顺序 和每个强连通分量的具体信息 */ ...

  4. lucene 抛出的异常(分享)

    1) too many boolean clauses异常 例如: String keyword=".......";//(keyword的长度太长) Query indexQue ...

  5. MVC中javascript直接调用Model

    最近做一个统计页面, Model从后台已经获取了数据集合,想直接在前台展示,而这个展示是需要用js生成图表的. 控制器部分代码: public ActionResult Index() { var m ...

  6. 【原创】不用封装jar包 直接引入工程使用的方法(类似android的 is Library功能)

    1.制作lib工程,这里我简单制作一个测试类 2.eclipse中 java Project工程引入方法 2.1.新建个java工程,在属性配置中选择 "Java Build Path&qu ...

  7. xargs rm -rf 与 -exec rm

    # find ./ -exec rm {} \; # find ./ | xargs rm -rf 两者都可以把find命令查找到的结果删除,其区别简单的说是前者是把find发现的结果一次性传给exe ...

  8. [转]PHP取整函数:ceil,floor,round,intval的区别详细解析

    我们经常用到的PHP取整函数,主要是:ceil,floor,round,intval. 1.ceil -- 进一法取整 说明float ceil ( float value ) 返回不小于 value ...

  9. QT QSettings 操作(导入导出、保存获取信息)*.ini文件详解

    1.QSettings基本使用 1.1.生成.ini文件,来点实用的代码吧. QString fileName;fileName = QCoreApplication::applicationDirP ...

  10. Cocos2dx开发(2)——Win8.1下Cocod2dx 3.2环境搭建

    正式开始搭建cocos2dx环境,回到熟悉的VS 1.Python安装配置 这一步很简单,下载Python2.7.3,笔者直接用软件助手直接下载安装,最后配置环境变量 如下成功 2.cocos2dx ...