<?php
function Solve($pN){
$UB = $pN;
// 場合の数[配置済の人数]
$DP = array();
for( $I = 0 ; $I <= $UB ; $I++){
$DP[$I] = 0;
}
$DP[0] = 1;
for( $I = 2 ; $I <= 10 ; $I++){
for( $J = 0 ; $J <= $UB ; $J++){
if ($DP[$J] == 0) continue;
$NewJ = $J + $I;
if ($NewJ > $UB) break;
$DP[$NewJ] += $DP[$J];
}
}
printf('人数合計が%dだと、%d通り', $pN , $DP[$UB]);
echo PHP_EOL;
}
Solve( 6); // 4
Solve(100); //437420
人数合計が6だと、4通り 人数合計が100だと、437420通り
動的計画法で解いてます。