这是一个完全背包问题,套用模板就好了
/**
* 动态规划
* @param Integer $n
* @return Integer
*/
function numSquares($n) {
$dp = array_fill(0, $n+1, 0);
for($i=1; $i<=$n; $i++) {
$min = PHP_INT_MAX;
for ($j=1; $j*$j<=$i; $j++) {
$min = min($min, $dp[$i-$j*$j]);
}
$dp[$i] = $min+1;
}
return $dp[$n];
}