算法训练 采油区域
时间限制:2.0s 内存限制:512.0MB
提交此题 查看参考代码
  采油区域  Siruseri政府决定将石油资源丰富的Navalur省的土地拍卖给私人承包商以建立油井。被拍卖的整块土地为一个矩形区域,被划分为M×N个小块。
  Siruseri地质调查局有关于Navalur土地石油储量的估测数据。这些数据表示为M×N个非负整数,即对每一小块土地石油储量的估计值。
  为了避免出现垄断,政府规定每一个承包商只能承包一个由K×K块相连的土地构成的正方形区域。
  AoE石油联合公司由三个承包商组成,他们想选择三块互不相交的K×K的区域使得总的收益最大。
  例如,假设石油储量的估计值如下:

如果K = 2, AoE公司可以承包的区域的石油储量总和为100, 如果K = 3, AoE公司可以承包的区域的石油储量总和为208。
  AoE公司雇佣你来写一个程序,帮助计算出他们可以承包的区域的石油储量之和的最大值。
输入格式
  输入第一行包含三个整数M, N, K,其中M和N是矩形区域的行数和列数,K是每一个承包商承包的正方形的大小(边长的块数)。接下来M行,每行有N个非负整数表示这一行每一小块土地的石油储量的估计值。
输出格式
  输出只包含一个整数,表示AoE公司可以承包的区域的石油储量之和的最大值。
数据规模和约定
  数据保证K≤M且K≤N并且至少有三个K×K的互不相交的正方形区域。其中30%的输入数据,M, N≤ 12。所有的输入数据, M, N≤ 1500。每一小块土地的石油储量的估计值是非负整数且≤ 500。
样例输入
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
样例输出
208

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;public class 采油区域 {static int map[][];static int sum[][];static int kk[][];static int leftup[][];static int rightup[][];static int leftdown[][];static int rightdown[][];static int max(int a, int b) {return a>b?a:b;}static void print(int arr[][]) {for(int i=0;i<arr.length;i++) {for(int j=0;j<arr[i].length;j++) {System.out.print(arr[i][j]+" ");}System.out.println();}System.out.println();}public static void main(String args[]) throws IOException {int M,N,K;//Scanner in = new Scanner(System.in);BufferedReader br = new BufferedReader(new InputStreamReader(System.in));//录入数据String cs[] = br.readLine().split(" ");M=Integer.valueOf(cs[0]);N=Integer.valueOf(cs[1]);K=Integer.valueOf(cs[2]);//M=in.nextInt();//N=in.nextInt();//K=in.nextInt();int m = M-K+1;int n = N-K+1;map = new int[M+1][N+1];for(int i=1;i<=M;i++) {cs = br.readLine().split(" ");for(int j=1;j<=N;j++) {//map[i][j]=in.nextInt();map[i][j]=Integer.valueOf(cs[j-1]);}}//用前缀和计算 sumsum = new int[M+1][N+1];for(int i=1;i<=M;i++) {for(int j=1;j<=N;j++) {sum[i][j]=sum[i-1][j]+sum[i][j-1]-sum[i-1][j-1]+map[i][j];}}//用前缀和计算kkkk = new int[m][n];for(int i=K;i<=M;i++) {for(int j=K;j<=N;j++) {kk[i-K][j-K]=sum[i][j]-sum[i-K][j]-sum[i][j-K]+sum[i-K][j-K];}}//计算四个方向的maxleftup = new int[m][n];rightup = new int[m][n];leftdown = new int[m][n];rightdown = new int[m][n];leftup[0][0]=kk[0][0];for(int i=1;i<m;i++) leftup[i][0]=max(kk[i][0], leftup[i-1][0]);for(int j=1;j<n;j++) leftup[0][j]=max(kk[0][j], leftup[0][j-1]);for(int i=1;i<m;i++) {for(int j=1;j<n;j++) {leftup[i][j]=max(kk[i][j], max(leftup[i-1][j], leftup[i][j-1]));}}rightup[0][n-1]=kk[0][n-1];for(int i=1;i<m;i++) rightup[i][n-1]=max(kk[i][n-1], rightup[i-1][n-1]);for(int j=n-2;j>=0;j--) rightup[0][j]=max(kk[0][j], rightup[0][j+1]);for(int i=1;i<m;i++) {for(int j=n-2;j>=0;j--) {rightup[i][j]=max(kk[i][j], max(rightup[i-1][j], rightup[i][j+1]));}}leftdown[m-1][0]=kk[m-1][0];for(int i=m-2;i>=0;i--) leftdown[i][0]=max(kk[i][0], leftdown[i+1][0]);for(int j=1;j<n;j++) leftdown[m-1][j]=max(kk[m-1][j], leftdown[m-1][j-1]);for(int i=m-2;i>=0;i--)  {for(int j=1;j<n;j++) {leftdown[i][j]=max(kk[i][j], max(leftdown[i][j-1], leftdown[i+1][j]));}}rightdown[m-1][n-1]=kk[m-1][n-1];for(int i=m-2;i>=0;i--) rightdown[i][n-1]=max(kk[i][n-1], rightdown[i+1][n-1]);for(int j=n-2;j>=0;j--) rightdown[m-1][j]=max(kk[m-1][j], rightdown[m-1][j+1]);for(int i=m-2;i>=0;i--)  {for(int j=n-2;j>=0;j--) {rightdown[i][j]=max(kk[i][j], max(rightdown[i+1][j], rightdown[i][j+1]));}}//计算六种情况int ans=0;//一for(int j=0;j<n-2*K;j++) {for(int i=0;i<m;i++) {ans = max(ans, leftup[m-1][j]+kk[i][j+K]+rightup[m-1][j+K+K]);}}//|for(int i=0;i<m-2*K;i++) {for(int j=0;j<n;j++) {ans = max(ans, leftup[i][n-1]+kk[i+K][j]+leftdown[i+K+K][n-1]);}}//左for(int i=0;i<m-K;i++) {for(int j=0;j<n-K;j++) {ans = max(ans, leftup[m-1][j]+rightup[i][j+K]+rightdown[i+K][j+K]);}}//右for(int i=0;i<m-K;i++) {for(int j=n-1;j-K>0;j--) {ans = max(ans, leftup[i][j-K]+leftdown[i+K][j-K]+rightup[m-1][j]);}}//上for(int i=0;i<m-K;i++) {for(int j=0;j<n-K;j++) {ans = max(ans, leftup[i][n-1]+leftdown[i+K][j]+rightdown[i+K][j+K]);}}//下for(int i=K;i<m;i++) {for(int j=0;j<n-K;j++) {ans = max(ans, leftup[i-K][j]+rightup[i-K][j+K]+leftdown[i][n-1]);}}System.out.println(ans);}}

Java实现 蓝桥杯VIP 算法训练 采油区域相关推荐

  1. Java实现 蓝桥杯VIP 算法训练 无权最长链

    试题 算法训练 无权最长链 问题描述 给定一个n节点m边的无圈且连通的图,求直径 输入格式 第一行两个数字n,m 接下来m行每行两个数字x,y,代表x,y之间有一条边 输出格式 要求用户的输出满足的格 ...

  2. Java实现 蓝桥杯VIP 算法训练 步与血(递推 || DFS)

    试题 算法训练 步与血 问题描述 有n*n的方格,其中有m个障碍,第i个障碍会消耗你p[i]点血.初始你有C点血,你需要从(1,1)到(n,n),并保证血量大于0,求最小步数. 输入格式 第一行3个整 ...

  3. Java实现蓝桥杯VIP算法训练 二元函数

    试题 算法训练 二元函数 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 令二元函数f(x,y)=ax+by,a和b为整数,求一个表达式S的值. 只有满足以下要求的表达式才是合法的: ...

  4. Java实现 蓝桥杯VIP 算法训练 删除多余括号

    算法训练 删除多余括号 时间限制:1.0s 内存限制:512.0MB 问题描述 从键盘输入一个含有括号的四则运算表达式,要求去掉可能含有的多余的括号,结果要保持原表达式中变量和运算符的相对位置不变,且 ...

  5. Java实现 蓝桥杯VIP 算法训练 JAM计数法

    题目描述 Jam是个喜欢标新立异的科学怪人.他不使用阿拉伯数字计数,而是使用小 写英文字母计数,他觉得这样做,会使世界更加丰富多彩.在他的计数法中,每个数字的位数都是相同的(使用相同个数的字母),英文 ...

  6. Java实现 蓝桥杯VIP 算法训练 学做菜

    算法训练 学做菜 时间限制:1.0s 内存限制:256.0MB 问题描述 涛涛立志要做新好青年,他最近在学做菜.由于技术还很生疏,他只会用鸡蛋,西红柿,鸡丁,辣酱这四种原料来做菜,我们给这四种原料标上 ...

  7. Java实现 蓝桥杯VIP 算法训练 sign函数

    试题 算法训练 sign函数 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述 给定实数x,输出sign(x)的值. sign(x)是符号函数,如果x>0,则返回1:如果x=0, ...

  8. Java实现 蓝桥杯VIP 算法训练 数对

    算法训练 数对 时间限制:1.0s 内存限制:512.0MB 问题描述 编写一个程序,该程序从用户读入一个整数,然后列出所有的数对,每个数对的乘积即为该数. 输入格式:输入只有一行,即一个整数. 输出 ...

  9. Java实现 蓝桥杯VIP 算法训练 星际交流

    算法训练 星际交流 时间限制:1.0s 内存限制:256.0MB 问题描述 人类终于登上了火星的土地并且见到了神秘的火星人.人类和火星人都无法理解对方的语言,但是我们的科学家发明了一种用数字交流的方法 ...

最新文章

  1. windows 2003 活动目录的更改域名后缀技巧
  2. 办公室自动化系统_大队举办办公自动化系统培训班
  3. PostgreSQL-8-数据合并
  4. switch java 语法_Java编程—switch语句语法详解
  5. 螺旋矩阵 IIPython解法
  6. 利用正则获取url传递的数据
  7. java steam 排序_Java使用Steams VS TreeMap对地图进行排序
  8. 谷歌手机Nexus和Pixel系列研发代号
  9. 73 ----空间曲线的投影、投影柱面与投影曲线的方程、二元函数的等值线、等高线的性质
  10. VBS 实现无限弹窗整人
  11. php ajax 同时验证 用户名 密码
  12. SQL中drop,delete和truncate的异同
  13. 虚拟签到拍照打卡技巧,超实在的教程
  14. 使用bootstrap写一个注册页面
  15. HTML CSS 学习笔记
  16. Live800:企业必修课|新时代的全渠道营销解析(上)
  17. 3*4的方格,有多少个长方形?
  18. Qt QPlainTextEdit用法详解
  19. 编程基础---echarts学习
  20. Proteus——测量脉冲频率

热门文章

  1. 微信小程序外包 很可能遇到很多坑 提供源代码 需要小程序定制的联系 定制开发
  2. 计算机运维考核指标,信息中心考核指标库
  3. 【求职】瓜子C++方向面经
  4. 【Google】谷歌浏览器背景颜色变黑
  5. 在网络中 计算机输出的信号是,2019陕西国家电网校园招聘计算机类笔试:计算机网络自测四...
  6. compiti delle vacanze 暑假作业
  7. #完全背包#CH 5202 自然数拆分Lunatic版
  8. 小米5升级Linux内核,小米5 刷机LineageOS 14.1的详细教程
  9. MongoDB的副本集
  10. 计算机操作系统虚拟内存管理