关注
定义DP[i][j] = (当前剩余生命,路径上剩余生命最小值)
找左边和右边剩余生命最大的路走就好了。下面是Java代码。
import java.util.*;
public class Main1 {
private static int solute(int[][] matrix, int n, int m) {
int[][][] dp = new int[n][m][2]; // 二元组,(当前剩余生命,路径上剩余生命最小值)
dp[0][0] = new int[]{matrix[0][0], matrix[0][0]};
for (int i = 1; i < m; i++) {
int remain = matrix[0][i] + dp[0][i - 1][0];
dp[0][i] = new int[]{remain, Math.min(remain, dp[0][i - 1][1])};
}
for (int i = 1; i < n; i++) {
for (int j = 0; j < m; j++) {
if (j == 0 || dp[i - 1][j][0] > dp[i][j - 1][0]) {
int remain = matrix[i][j] + dp[i - 1][j][0];
dp[i][j] = new int[]{remain, Math.min(remain, dp[i - 1][j][1])};
} else {
int remain = matrix[i][j] + dp[i][j - 1][0];
dp[i][j] = new int[]{remain, Math.min(remain, dp[i][j - 1][1])};
}
}
}
return dp[n - 1][m - 1][1] < 0 ? -dp[n - 1][m - 1][1] : 0;
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int m = sc.nextInt();
int[][] inputs = new int[n][m];
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
inputs[i][j] = sc.nextInt();
}
}
System.out.println(solute(inputs, n, m));
}
}
输入: 3 3 -2 -3 3 -5 -10 1 10 30 -5 输出: 7
查看原帖
点赞 3
相关推荐
数学转码崽:这也太难了吧
查看24道真题和解析
点赞 评论 收藏
分享
01-25 16:16
广东工业大学 golang 点赞 评论 收藏
分享
点赞 评论 收藏
分享
牛客热帖
更多
正在热议
更多
# 我的2024牛客高光时刻 #
98032次浏览 1546人参与
# 你今年的保底offer是哪家 #
25124次浏览 214人参与
# 客路2025全球产研实习生招聘 #
28998次浏览 206人参与
# 被同事甩锅了怎么办 #
15731次浏览 90人参与
# 面试时被问的最奇葩的问题 #
8313次浏览 61人参与
# 工作丧失热情的瞬间 #
221617次浏览 2169人参与
# 新年的第一句祝福 #
9020次浏览 195人参与
# 如果中了500万,你会离职吗? #
29445次浏览 297人参与
# 你还有多少年退休? #
17541次浏览 159人参与
# 辞职之后最想做的一件事 #
5221次浏览 75人参与
# 公司年会,我…… #
8623次浏览 61人参与
# 当下环境,你会继续卷互联网,还是看其他行业机会 #
57945次浏览 461人参与
# 22届毕业,是读研还是拿外包offer先苟着 #
3722次浏览 25人参与
# 实习生应该准时下班吗 #
176408次浏览 1183人参与
# 软开人,秋招你打算投哪些公司呢 #
62835次浏览 674人参与
# 在职场中遇到恋情要继续还是放弃 #
6271次浏览 59人参与
# 今年过年,你可以休息几天? #
6571次浏览 53人参与
# 正在实习的你,几点下班 #
74907次浏览 565人参与
# 没有实习经历,还有机会进大厂吗 #
1130416次浏览 16660人参与
# 互联网公司爆料 #
93445次浏览 600人参与
# 字节跳动工作体验 #
275677次浏览 3434人参与