全ての経路を計算するのではなく、段ごとに、合計の最大値を順番に求めていく。
<?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;
?>