785. 最大权值和路径

原创 2018年04月17日 19:04:35

题目:

有一个机器人位于一个 m × n 个网格的右上角。
机器人每一时刻只能向下或者向左移动一步。机器人试图达到网格的左下角。每个网格上有一个数字权值,机器人希望它走到左下角的路径权值和最大

问这个最大路径权值和是多少?


样例:

        给出 [[1,2,3,4],[3,5,6,7],[9,10,1,2],[4,4,5,5]] ,返回45

    解释:从右上角出发,沿着[4,7,6,5,10,9,4]走到左下角。权值和为45。

第一次测试:

public class Solution {
	public static void main(String[] args) {
		 int[][] nums = { { 22, 17, 16, 6, 15 }, { 22, 9, 14, 9, 7 },
		 { 4, 10, 6, 18, 8 }, { 22, 25, 13, 3, 1 }, { 16, 24, 21, 3, 2 } };
		System.out.println(maxWeight(nums));
	}

	/**
	 * 求最大权值
	 */
	public static int maxWeight(int[][] nums) {
		int i = 0;
		int j = nums[0].length - 1;
		int sum = nums[i][j];
		while (i != nums.length - 1 || j != 0) {
			System.out.println("i:" + i + "j:" + j);
			if (j == 0) {
				sum = sum + nums[i + 1][j];
				i++;
				continue;
			}
			if (i == nums.length - 1) {
				sum = sum + nums[i][j - 1];
				j--;
				continue;
			}
			if (nums[i][j - 1] > nums[i + 1][j]) {
				sum = sum + nums[i][j - 1];
				j--;
				continue;
			} else {
				sum = sum + nums[i + 1][j];
				i++;
				continue;
			}
		}
		return sum;
	}
}

结果是133,成功!,

第二次测试:

public class Solution {
	public static void main(String[] args) {
		String str = "[[30,30,4,97,48,84,12,44,41,50],[92,80,50,35,5,1,24,60,84,76],[24,82,94,18,64,36,36,17,44,5],[0,5,80,80,60,55,20,60,81,92],[8,18,0,86,48,91,22,8,44,67],[20,84,52,49,74,16,90,15,83,9],[11,2,42,58,76,78,68,11,54,76],[64,36,10,60,6,90,14,40,0,92],[34,60,52,49,63,28,68,40,80,64],[0,25,56,50,21,12,80,75,38,68]]";
		int[][] nums = change(str);
		System.out.println(maxWeight(nums));
	}

	/**
	 * 求最大权值
	 */
	public static int maxWeight(int[][] nums) {
		int i = 0;
		int j = nums[0].length - 1;
		int sum = nums[i][j];
		while (i != nums.length - 1 || j != 0) {
			System.out.println("i:" + i + "j:" + j);
			if (j == 0) {
				sum = sum + nums[i + 1][j];
				i++;
				continue;
			}
			if (i == nums.length - 1) {
				sum = sum + nums[i][j - 1];
				j--;
				continue;
			}
			if (nums[i][j - 1] > nums[i + 1][j]) {
				sum = sum + nums[i][j - 1];
				j--;
				continue;
			} else {
				sum = sum + nums[i + 1][j];
				i++;
				continue;
			}
		}
		return sum;
	}

	/**
	 * 把字符串转成int[][]
	 */
	private static int[][] change(String str) {
		String[] s = str.split("[,\\]\\[]");
		int k = 0;
		String[][] arr = new String[10][10];
		int[][] in = new int[10][10];
		for (int i = 0; i < 10; i++) {
			for (int j = 0; j < 10;) {
				if (!s[k].equals("")) {
					arr[i][j] = s[k];
					j++;
				}
				k++;
			}
		}
		for (int i = 0; i < in.length; i++) {
			for (int j = 0; j < in.length; j++) {
				in[i][j] = Integer.parseInt(arr[i][j]);
			}
		}
		return in;
	}
}

结果是1018,正解是1102,失败!

接下来我画图研究了我的算法,我发现我的算法是从右上角开始,每次选择此格的左边或下边较大的一个格子去走,但是我画出图来后发现这种算法并不能得到最大权值。

   


算法修改中....




征服Node.js 7.x视频课程(7):路径(Path)

-
  • 1970年01月01日 08:00

HDU 2571 路径权值最大

#include #include #include #include using namespace std;int a[25][1005]; int dp[25][1005];int main()...
  • JACK_JYH
  • JACK_JYH
  • 2016-08-09 16:45:45
  • 194

[LintCode]785.最大权值和路径 (想起了16年小组免试题第五关)

前言 最简单的动归,依稀记得当年小组免试题最后一关就是这样的(恩,是最后一关的前一部分哈),思路和之前的博客一样,做之前又复习了一遍博客,然后就轻松+愉快(哼,才不是呢,一开始没搞懂m,n怎么处理,...
  • XiyouLinux_Kangyijie
  • XiyouLinux_Kangyijie
  • 2018-01-31 23:59:24
  • 134

树形dp ,求最大路径权值,最长路径

#include #include #include #include #include #include #include #include #include #include ...
  • rgtjf
  • rgtjf
  • 2013-08-31 19:37:27
  • 668

HDU 2571 路径权值最大 dp

命运 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submi...
  • became_a_wolf
  • became_a_wolf
  • 2015-12-14 11:39:32
  • 262

带权值二叉树的路径最长值与路径

一、Problem Given a binary tree, every node has a weight, then you need to find out the path that can...
  • HOMERUNIT
  • HOMERUNIT
  • 2016-05-25 19:54:38
  • 824

POJ 2253 Frogger (单源最短路变型 求路径上最大边权值的最小值)

题目链接POJ2253题目大意输入N(2≤\leN≤\le200)个点的坐标,任意两点可以互相到达,经过的距离为它们的欧式距离。现在从1号点到2号点有多条路径,求这些路径中最大边权值的最小值。分析这题...
  • yyt330507870
  • yyt330507870
  • 2017-04-26 17:01:11
  • 491

poj 2455 Secret Milking Machine 【二分 + 最大流】 【1到N不重复路径不少于T条时,求被选中路径上的最大边权值 的最小值】

Secret Milking Machine Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 10620   Ac...
  • chenzhenyu123456
  • chenzhenyu123456
  • 2015-08-27 01:36:45
  • 1831

二叉树中权值最大的叶节点到权值最小的叶节点的距离

有一棵二叉树,树上每个点标有权值,权值各不相同,请设计一个算法算出权值最大的叶节点到权值最小的叶节点的距离。二叉树每条边的距离为1,一个节点经过多少条边到达另一个节点为这两个节点之间的距离。给定二叉树...
  • yang20141109
  • yang20141109
  • 2016-04-02 21:11:18
  • 1508

最大路径之和

public static void findMaxPath(Node node,Stack stack,List list){ if(node==null){ return; } ...
  • lightsu_1029
  • lightsu_1029
  • 2016-09-21 17:26:03
  • 156
收藏助手
不良信息举报
您举报文章:785. 最大权值和路径
举报原因:
原因补充:

(最多只允许输入30个字)