Problem 18:Maximum path sum I

原题链接:http://projecteuler.net/problem=18


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

3
7 4
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 are only 16384 routes, it is possible to solve this problem by trying every route. However, Problem 67, is the same challenge with a triangle containing one-hundred rows; it cannot be solved by brute force, and requires a clever method! ;o)


题目大意是:

从下面的三角形的顶端开始,向下面一行的相邻数字移动,从顶端到底端的最大总和为23.

3
7 4
4 6
8 5 9 3

也就是 3 + 7 + 4 + 9 = 23.

找出从以下三角形的顶端走到底端的最大总和:

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


解法1:

参考自:http://www.mathblog.dk/project-euler-18/

简单地说,就是从下自上,找出那一层里的每两个数的较大者,并加到这两个数对应的上一层的那个数里。例如对于上面的小三角,第4层是8,5,9,3,而8与5这两个相邻的数,8比5大,8然后加到8,5对应的上一层的那个数2上,5和9,9和3,这两对也是如此,则小三角简化成如下所示:

                    3

                 7   4

            10 13  15

一直简化到只剩下最顶层。

php代码:

$str=<<=0;$i--){
	$len = count($numbers[$i]);
	for($j=0;$j<$len;$j++){
		$a = $numbers[$i][$j]+$numbers[$i+1][$j];
		$b = $numbers[$i][$j]+$numbers[$i+1][$j+1];
		$numbers[$i][$j] = max($a,$b);
	}
}
var_export($numbers[0]);


注:题目的中文翻译源自http://pe.spiritzhang.com      

你可能感兴趣的:(ProjectEuler,PHP,ProjectEuler)