当前位置:网站首页>最大路径和
最大路径和
2022-07-31 01:38:00 【小卢要刷力扣题】
前言
链接:https://www.nowcoder.com/questionTerminal/8ecfe02124674e908b2aae65aad4efdf
来源:牛客网
给定一个矩阵matrix,先从左上角开始,每一步只能往右或者往下走,走到右下角。然后从右下角出发,每一步只能往上或者往左走,再回到左上角。任何一个位置的数字,只能获得一遍。返回最大路径和。
输入描述:
第一行输入两个整数M和N,M,N<=200
接下来M行,每行N个整数,表示矩阵中元素
输出描述:
输出一个整数,表示最大路径和
解题思路
两个人A, B都从左下角走到右下角,都只能向下或者向右走,但是A跟B能做出不同的选择
如果,某一时刻,AB进入相同的一 个格子,A和B只获得一份
A走到之后,就认为B就是回来的路径
A来到了a行b列, B来到了c行d列,如果它们跳进不同的格子里。
只获得一个的情况下,问你a跟b获得整体的最大。

如果某一个位置A也来过,B也来过,AB-定是同时来的,而不会分先后
因为AB同步走
可以省掉一个变量d,可以根据abc来推出d
代码
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int N = sc.nextInt();
int M = sc.nextInt();
int[][] matrix = new int[N][M];
for (int i = 0; i < N; i++) {
for (int j = 0; j < M; j++) {
matrix[i][j] = sc.nextInt();
}
}
int ans = cherryPickup(matrix);
System.out.println(ans);
sc.close();
}
public static int cherryPickup(int[][] grid) {
int N = grid.length;
int M = grid[0].length;
int[][][] dp = new int[N][M][N];
for (int i = 0; i < N; i++) {
for (int j = 0; j < M; j++) {
for (int k = 0; k < N; k++) {
dp[i][j][k] = Integer.MIN_VALUE;
}
}
}
int ans = process(grid, 0, 0, 0, dp);
return ans < 0 ? 0 : ans;
}
public static int process(int[][] grid, int x1, int y1, int x2, int[][][] dp) {
if (x1 == grid.length || y1 == grid[0].length || x2 == grid.length || x1 + y1 - x2 == grid[0].length) {
return Integer.MIN_VALUE;
}
if (dp[x1][y1][x2] != Integer.MIN_VALUE) {
return dp[x1][y1][x2];
}
if (x1 == grid.length - 1 && y1 == grid[0].length - 1) {
dp[x1][y1][x2] = grid[x1][y1];
return dp[x1][y1][x2];
}
int next = Integer.MIN_VALUE;
next = Math.max(next, process(grid, x1 + 1, y1, x2 + 1, dp));
next = Math.max(next, process(grid, x1 + 1, y1, x2, dp));
next = Math.max(next, process(grid, x1, y1 + 1, x2, dp));
next = Math.max(next, process(grid, x1, y1 + 1, x2 + 1, dp));
if (grid[x1][y1] == -1 || grid[x2][x1 + y1 - x2] == -1 || next == -1) {
dp[x1][y1][x2] = -1;
return dp[x1][y1][x2];
}
if (x1 == x2) {
dp[x1][y1][x2] = grid[x1][y1] + next;
return dp[x1][y1][x2];
}
dp[x1][y1][x2] = grid[x1][y1] + grid[x2][x1 + y1 - x2] + next;
return dp[x1][y1][x2];
}
边栏推荐
- prometheus 监控概述
- 九州云入选“可信云最新评估体系及2022年通过评估企业名单”
- 软件测试缺陷报告---定义,组成,缺陷的生命周期,缺陷跟踪产后处理流程,缺陷跟踪处理流程,缺陷跟踪的目的,缺陷管理工具
- Mysql:Invalid default value for TIMESTAMP
- .NET 跨平台应用开发动手教程 |用 Uno Platform 构建一个 Kanban-style Todo App
- Bert usage and word prediction based on Keras_bert model
- I have been working in software testing for 3 years, how did I go from just getting started to automated testing?
- Word/Excel 固定表格大小,填写内容时,表格不随单元格内容变化
- 设置浏览器滚动条样式
- The difference between 4G communication module CAT1 and CAT4
猜你喜欢

Interprocess communication study notes

C language _ structure pointer array function voting system

想要写出好的测试用例,先要学会测试设计

解析云原生消息流系统 Apache Pulsar 能力及场景

Sping.事务的传播特性

Kyushu cloud as cloud computing standardization excellent member unit

【网络安全】文件上传靶场通关(1-11关)

221. 最大正方形

Meta元宇宙部门第二季度亏损28亿 仍要继续押注?元宇宙发展尚未看到出路

Mysql: Invalid default value for TIMESTAMP
随机推荐
小黑leetcode之旅:104. 二叉树的最大深度
PDF 拆分/合并
解析云原生消息流系统 Apache Pulsar 能力及场景
Kyushu cloud as cloud computing standardization excellent member unit
孩子的编程启蒙好伙伴,自己动手打造小世界,长毛象教育AI百变编程积木套件上手
蛮力法/邻接矩阵 广度优先 有向带权图 无向带权图
进程间通信学习笔记
射频器件的基本参数2
ECCV 2022 华科&ETH提出首个用于伪装实例分割的一阶段Transformer的框架OSFormer!代码已开源!
android的webview缓存相关知识收集
内网渗透——提权
数字图像隐写术之JPEG 隐写分析
Bert usage and word prediction based on Keras_bert model
设置浏览器滚动条样式
Chi-square distribution of digital image steganography
聚簇索引和非聚簇索引到底有什么区别
Fiddler抓包模拟弱网络环境测试
TiDB之rawkv升级之路v5.0.4--&gt;v6.1.0
24. Please talk about the advantages and disadvantages of the singleton pattern, precautions, usage scenarios
Crawler text data cleaning