加强版逃生

来源:互联网 发布:访客营销效果数据每封 编辑:程序博客网 时间:2024/05/03 07:55
package com.study.dp;import java.util.Scanner;public class test6 {public static void main(String[] args) {Scanner sc = new Scanner(System.in);int n = sc.nextInt(), m = sc.nextInt();// 地图大小int x = sc.nextInt(), y = sc.nextInt();// 初始化位置int v = sc.nextInt();// 初始血量int c = sc.nextInt();// 血量上限int[][] mat = new int[n + 1][m + 1];// 地图int[][] dp = new int[n + 1][m + 1];// 到达某个点的最大血量// 初始化地图for (int i = 1; i <= n; i++) {for (int j = 1; j <= m; j++) {mat[i][j] = sc.nextInt();}}dp[x][y] = v;// 左上出口1,1for (int i = x; i > 0; i--) {for (int j = y; j > 0; j--) {if (i == x && j == y)continue;else if (i == x) {dp[i][j] = dp[i][j + 1] + mat[i][j];} else if (j == y) {dp[i][j] = dp[i + 1][j] + mat[i][j];} else {dp[i][j] = Math.max(dp[i][j + 1], dp[i + 1][j]) + mat[i][j];}if (dp[i][j] > c)dp[i][j] = c;else if(dp[i][j] <=0)dp[i][j] = -100000000;}}// 左下出口 n 1for (int i = x; i <= n; i++) {for (int j = y; j >= 1; j--) {if (i == x && j == y)continue;else if (i == x ) {dp[i][j] = dp[i][j + 1] + mat[i][j];} else if (j == y ) {dp[i][j] = dp[i - 1][j] + mat[i][j];} else {dp[i][j] = Math.max(dp[i][j + 1], dp[i - 1][j]) + mat[i][j];}if (dp[i][j] > c)dp[i][j] = c;else if(dp[i][j] <=0)dp[i][j] = -100000000;}}// 右上出口 1,mfor (int i = x; i >= 1; i--) {for (int j = y; j <= m; j++) {if (i == x && j == y)continue;else if (i == x ) {dp[i][j] = dp[i][j - 1] + mat[i][j];} else if (j == y ) {dp[i][j] = dp[i + 1][j] + mat[i][j];} else  {dp[i][j] = Math.max(dp[i][j - 1], dp[i + 1][j]) + mat[i][j];}if (dp[i][j] > c)dp[i][j] = c;else if(dp[i][j] <=0)dp[i][j] = -100000000;}}// 右下出口 n mfor (int i = x; i <= n; i++) {for (int j = y; j <= m; j++) {if (i == x && j == y)continue;else if (i == x ) {dp[i][j] = dp[i][j - 1] + mat[i][j];} else if (j == y ) {dp[i][j] = dp[i - 1][j] + mat[i][j];} else  {dp[i][j] = Math.max(dp[i][j - 1], dp[i - 1][j]) + mat[i][j];}if (dp[i][j] > c)dp[i][j] = c;else if(dp[i][j] <=0)dp[i][j] = -100000000;}}int m1 = Math.max(dp[1][1], dp[n][1]);int m2 = Math.max(dp[1][m], dp[n][m]);int max = Math.max(m1, m2);if(max>0)System.out.println(max);elseSystem.out.println(-1);}}

0 0
原创粉丝点击