【DPメニュー】> FAINAL問題【階段の上り方】階段の上り方 3 (paizaランク B 相当) [難易度: 1479 ±15]
※リンク先へ移動するためには[paiza]へのログインが必要です。
整数 n, a, b, c が与えられます。
階段を上るのに、1歩で a 段または b 段または c 段を上ることができるとき、n 段の階段を上る方法は何通りあるでしょうか。
入力値(例)
10 2 3 4
出力値(例)
17
解答例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
<?php list($n, $a, $b, $c) = explode(" ", trim(fgets(STDIN))); $dp[0] = 1; for ($i = 1; $i <= $n; $i++) { $dp[$i] = 0; if ($i >= $a) { $dp[$i] = $dp[$i] + $dp[$i - $a]; } if ($i >= $b) { $dp[$i] = $dp[$i] + $dp[$i - $b]; } if ($i >= $c) { $dp[$i] = $dp[$i] + $dp[$i - $c]; } } echo $dp[$n]; ?> |