Project Eluer-18

Source: Internet
Author: User

Maximum Path Sum Iproblem 18

By starting at the top of the triangle below and moving to adjacent numbers on the row below, the maximum total from top t O Bottom is 23.

3
7 4
2 4 6
8 5 9 3

That is, 3 + 7 + 4 + 9 = 23.

Find the maximum total from top to bottom of the triangle below:

75
95 64
17 47 82
18 35 87 10
20 04 82) 47 65
19 01 23 75 03 34
88 02 77 73 07 63 67
99 65 04 28 06 16 70 92
41 41 26 56 83 40 80 70 33
41 48 72 33 47 32 37 16 94 29
53 71 44 65 25 43 91 52 97 51 14
70 11 33 28 77 73 17 78 39 68 17 57
91 71 52 38 17 14 91 43 58 50 27 29 48
63 66 04 68 89 53 67 30 73 16 69 87 40 31
04 62 98 27 23 09 70 98 73 93 38 53 60 04 23

Note: As there is only 16384 routes, it's possible to solve this problem by trying every route. However,problem, is the same challenge with a triangle containing one-hundred rows; It cannot is solved by brute force, and requires a clever method! ; o)


Translation:

First look at the 4-row triangle, starting with Vertex 3, can only access its lower-left or lower-right corner of the two numbers, and so on, to find a path in the graph, so that all the numbers on the path and the maximum. The example is: 3+7+4+9=23. Please find the largest path in the 15-row triangle below.

(Note that this is the largest of all paths, not the largest one to traverse to the end, meaning: not necessarily the next node of the binary tree is large, then the path is large, requires the path of all the number and the largest path)


Solution: Here is of course the simplest solution, the figure is a binary tree, if you use an array to save, that is:

Static int[][] Array = new int[][]{
{75},
{95, 64},
{17, 47, 82},
{18, 35, 87, 10},
{20, 4, 82, 47, 65},
{19, 1, 23, 75, 3, 34},
{88, 2, 77, 73, 7, 63, 67},
{99, 65, 4, 28, 6, 16, 70, 92},
{41, 41, 26, 56, 83, 40, 80, 70, 33},
{41, 48, 72, 33, 47, 32, 37, 16, 94, 29},
{53, 71, 44, 65, 25, 43, 91, 52, 97, 51, 14},
{70, 11, 33, 28, 77, 73, 17, 78, 39, 68, 17, 57},
{91, 71, 52, 38, 17, 14, 91, 43, 58, 50, 27, 29, 48},
{63, 66, 4, 68, 89, 53, 67, 30, 73, 16, 69, 87, 40, 31},
{4, 62, 98, 27, 23, 9, 70, 98, 73, 93, 38, 53, 60, 4, 23}
};

Starting from arr[0][0], its left child is array[1][0], the right child is array[1][1], the law is: array[i][j] The left child is array[i+1][j], array[i+1][j+1]. Knowing this is a simple answer, we use recursion to find all the paths of the and, and then ask for a maximum value to be done, the code is as follows:

Package Projecteuler;public class Problem18 {private static final int SIZE = 15;private static int mresult;static int[][] Array = new int[][]{{75},{95, 64},{17, 82},{18, 3, 65},{19, 10},{20,  4, 1, approx., 34},{88  ,  2,  92},{41, 67},{99, 7,  4, 6, 16, 70, 41,  26, 56, 83, 40, 33},{41, 80, 70, 48 3, 47, 32, 37, 16, 94, 29},{53, 71, 44, 65, 25, 43, 91, 52, 97, 51, 14},{70, 11, 33, 28, 77, 73, 17, 78, 39, 68, 17, 57},{ 48},{63,  4, 68, 89, 53, 67, 30, 73, 16, 69, 87, 40, 31},{4, 62, 9,, +, +, +, (+) 8, 98, 9, 4, Max, Max, string[, Max, (+), (+) (+  )};p ublic static void Main (0,0,array[0][0) {traversal ]); System.out.println ("Mresult:" +mresult);} static void traversal (int i, int j, int sum) {if (i = = SIZE-1) {if (Mresult < sum) {mresult = sum;} return;} Traversal (I+1, J, Sum+array[i+1][j]) traversal (i+1, j+1, sum+array[i+1][j+1]);}}

Since we only need to ask for the maximum value of the path, do not need the output path, so we do not have to ask for a specific path, we only have to care about when traversing to the lowest level, if this path and larger than the largest path in our record, then replace the maximum path. The idea is simple.








Project Eluer-18

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.