Project Euler にチャレンジ:Problem 18 PHPでの解答

← Problem 17  Problem 19 →
全ての経路を計算するのではなく、段ごとに、合計の最大値を順番に求めていく。
<?php

// ファイルの読み込み
$file = file_get_contents("problem18.txt");
$array1 = explode("\n",trim($file,"\n"));
$array2 = array();
foreach($array1 as $k => $v)
{
	@$array2[$k] = explode(" ",$v);
}

$sum = array(array());

$count = count($array1);

for($i = 0 ; $i < $count ; $i++)
{
	for($j = 0 ; $j <= $i ; $j++)
	{
		$tmp1 = @$sum[$i - 1][$j] + $array2[$i][$j];
		$tmp2 = @$sum[$i - 1][$j - 1] + $array2[$i][$j];
		if($tmp1 < $tmp2)
		{
			$sum[$i][$j] = $tmp2;
		}
		else
		{
			$sum[$i][$j] = $tmp1;
		}
	}
}

$answer = max($sum[$count -1]);
echo $answer;

?>
問題文