【链接】 我是链接,点我呀:)

【题意】

两个人,一个人在左上角,一个人在左下角。
左上角要到右下角去
左下角要到右上角去
只能走到相邻的格子(不能往回走,即一个往右下,一个往右上走)
要求这两个人必须要在这个n*m的格子中选择一个格子作为休息点.
(两条路径只能有一个一样的点)
问最多能拿到多少分数(每个格子上有一个分数值)

【题解】

![](https://img2018.cnblogs.com/blog/1251265/201902/1251265-20190214171159886-1414539422.png)
会发现只有②和③不会重复走
则设f[p][i][j]分别为从左上、左下、右上、右下出发,到达点(i,j)的最大分数值
枚举休息点在什么地方
根据上图取答案的最大值就好

【代码】

import java.io.*;
import java.util.*; public class Main { static InputReader in;
static PrintWriter out; public static void main(String[] args) throws IOException{
//InputStream ins = new FileInputStream("E:\\rush.txt");
InputStream ins = System.in;
in = new InputReader(ins);
out = new PrintWriter(System.out);
//code start from here
new Task().solve(in, out);
out.close();
} static int N = (int)1e3;
static class Task{
public void solve(InputReader in,PrintWriter out) {
int n,m;
int [][]a = new int[N+10][N+10];
int [][][]f = new int[4][N+10][N+10];
n = in.nextInt();m = in.nextInt();
for (int i = 1;i <= n;i++)
for (int j = 1;j <= m;j++)
a[i][j] = in.nextInt(); //f[0]
for (int i = 1;i <= n;i++)
for (int j = 1;j <= m;j++)
f[0][i][j] = Math.max(f[0][i-1][j], f[0][i][j-1])+a[i][j]; //f[1]
for (int i = 1;i <= n;i++)
for (int j = m;j >= 1;j--)
f[1][i][j] = Math.max(f[1][i-1][j], f[1][i][j+1])+a[i][j]; //f[2]
for (int i = n;i >= 1;i--)
for (int j = 1;j <= m;j++)
f[2][i][j] = Math.max(f[2][i][j-1], f[2][i+1][j])+a[i][j]; //f[3]
//f[0]
for (int i = n;i >= 1;i--)
for (int j = m;j >= 1;j--)
f[3][i][j] = Math.max(f[3][i+1][j], f[3][i][j+1])+a[i][j]; int ans = 0;
for (int i = 1;i <= n;i++)
for (int j = 1;j <= m;j++) {
//(i,j)
if (i>=2 && i<=n-1 && j>=2 && j <= m-1) {
//plan 2
int temp0,temp1,temp2,temp3;
temp0 = f[0][i-1][j];
temp1 = f[1][i][j+1];
temp2 = f[2][i][j-1];
temp3 = f[3][i+1][j];
ans = Math.max(ans, temp0+temp1+temp2+temp3); //plan 3
temp0 = f[0][i][j-1];
temp1 = f[1][i-1][j];
temp2 = f[2][i+1][j];
temp3 = f[3][i][j+1];
ans = Math.max(ans, temp0+temp1+temp2+temp3);
}
}
out.println(ans);
}
} static class InputReader{
public BufferedReader br;
public StringTokenizer tokenizer; public InputReader(InputStream ins) {
br = new BufferedReader(new InputStreamReader(ins));
tokenizer = null;
} public String next(){
while (tokenizer==null || !tokenizer.hasMoreTokens()) {
try {
tokenizer = new StringTokenizer(br.readLine());
}catch(IOException e) {
throw new RuntimeException(e);
}
}
return tokenizer.nextToken();
} public int nextInt() {
return Integer.parseInt(next());
}
}
}

【Codeforces 429B】Working out的更多相关文章

  1. 【codeforces 415D】Mashmokh and ACM(普通dp)

    [codeforces 415D]Mashmokh and ACM 题意:美丽数列定义:对于数列中的每一个i都满足:arr[i+1]%arr[i]==0 输入n,k(1<=n,k<=200 ...

  2. 【codeforces 707E】Garlands

    [题目链接]:http://codeforces.com/contest/707/problem/E [题意] 给你一个n*m的方阵; 里面有k个联通块; 这k个联通块,每个连通块里面都是灯; 给你q ...

  3. 【codeforces 707C】Pythagorean Triples

    [题目链接]:http://codeforces.com/contest/707/problem/C [题意] 给你一个数字n; 问你这个数字是不是某个三角形的一条边; 如果是让你输出另外两条边的大小 ...

  4. 【codeforces 709D】Recover the String

    [题目链接]:http://codeforces.com/problemset/problem/709/D [题意] 给你一个序列; 给出01子列和10子列和00子列以及11子列的个数; 然后让你输出 ...

  5. 【codeforces 709B】Checkpoints

    [题目链接]:http://codeforces.com/contest/709/problem/B [题意] 让你从起点开始走过n-1个点(至少n-1个) 问你最少走多远; [题解] 肯定不多走啊; ...

  6. 【codeforces 709C】Letters Cyclic Shift

    [题目链接]:http://codeforces.com/contest/709/problem/C [题意] 让你改变一个字符串的子集(连续的一段); ->这一段的每个字符的字母都变成之前的一 ...

  7. 【Codeforces 429D】 Tricky Function

    [题目链接] http://codeforces.com/problemset/problem/429/D [算法] 令Si = A1 + A2 + ... + Ai(A的前缀和) 则g(i,j) = ...

  8. 【Codeforces 670C】 Cinema

    [题目链接] http://codeforces.com/contest/670/problem/C [算法] 离散化 [代码] #include<bits/stdc++.h> using ...

  9. 【codeforces 515D】Drazil and Tiles

    [题目链接]:http://codeforces.com/contest/515/problem/D [题意] 给你一个n*m的格子; 然后让你用1*2的长方形去填格子的空缺; 如果有填满的方案且方案 ...

随机推荐

  1. Spark SQL读parquet文件及保存

    import org.apache.spark.{SparkConf, SparkContext} import org.apache.spark.sql.{Row, SparkSession} im ...

  2. [Swift通天遁地]七、数据与安全-(15)使用单元测试进行代码的性能分析

    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs. ...

  3. 安科 OJ 1054 排队买票 (递归,排列组合)

    时间限制:1 s 空间限制:128 M 题目描述 有M个小孩到公园玩,门票是1元.其中N个小孩带的钱为1元,K个小孩带的钱为2元.售票员没有零钱,问这些小孩共有多少种排队方法,使得售票员总能找得开零钱 ...

  4. ThreadLocal原理及用法详解

    背景 一直以来对ThreadLocal用法模棱两可,不知道怎么用今天好好研究了下给大家分享下. 1.讲解ThreadLocal之前先回顾下什么是取模.x^y.弱引用. 1. 取模运算实际上是计算两数相 ...

  5. Akka源码分析-Router

    akak中还有一个比较重要的概念,那就是Router(路由).路由的概念,相信大家都不陌生,在akka中,它就是其他actors的一个代理,会把消息按照路由规则,分发给指定的actor.我一般喜欢把R ...

  6. gerrit项目配置

    1. 相关约定说明: 1.1 gerrit服务器ip地址:192.168.130.10 1.2 gerrit服务器端用户名:gerrit 1.3 gerrit用户端管理员:admin 1.4 ssh端 ...

  7. MVC系列学习(二)-初步了解ORM框架-EF

    1.新建 一个控制台项目 2.添加一个数据项 a.选择数据库 注:数据库中的表如下: b.选择EF版本 c.选择表 3.初步了解EF框架 看到了多了一个以 edmx后缀的文件 在edmx文件上,右击打 ...

  8. maven 纯注解一步一步搭建Spring Mvc项目(入门)

    初次接触spring MVC项目,通过一段时间的学习,本文介绍一种以纯注解的方法去配置spring MVC环境,让那些配置的.xml文件统统见鬼吧. 什么是Spring MVC Spring MVC属 ...

  9. [hihocoder][Offer收割]编程练习赛58

    最大的K-偏差排列 每次取可选范围里的最大的数字,如果最左侧的数字还没有使用就直接使用最左侧的数字 #pragma comment(linker, "/STACK:102400000,102 ...

  10. 解决Android弹出软键盘导致的问题

    一.当Activity启动后EditText直接获取了焦点,此时软键盘会自动弹出,这种体验并不是很好,因此要做的Activity启动不自动弹出软键盘,只需要在Manifest中对应的Activity添 ...