問題
標準的なサイコロは1から6までの整数を出します。合計が target となる、空でない順序付きの出目列のすべてを数えてください。順序が異なれば別の列として数えます。個数を1,000,000,007で割った余りを返してください。
dice_combinations(target) を実装してください。
入力
target: すべての出目の合計となる値。
出力
列の個数を1,000,000,007で割った余りとして返してください。
制約
1 ≤ target ≤ 1,000,000。個数を1,000,000,007で割った余りを返すとは、その個数を1,000,000,007で割ったときの余りを返すことを意味します。
例
例 1
入力:
target = 2
期待される出力:
expected = 2
入力:
long long target = 2;
期待される出力:
long long expected = 2;
入力:
long target = 2;
期待される出力:
long expected = 2;
解説
2通りの列は [2] と [1, 1] です。
例 2
入力:
target = 4
期待される出力:
expected = 8
入力:
long long target = 4;
期待される出力:
long long expected = 8;
入力:
long target = 4;
期待される出力:
long expected = 8;
解説
列は [4], [1,3], [3,1], [2,2], [1,1,2], [1,2,1], [2,1,1], [1,1,1,1] です。
解き方のヒント
まずは自分で考えてから、ヒントを 1 つずつ開いてみましょう。
ヒント 1
小さい和を、目標値を作るための部品として考えます。
ヒント 2
各和は、直前の6個の和を使った累積で数えます。
ヒント 3
加算のたびに modulo を適用し、1未満の和は別扱いにします。
目安の計算量
時間 O(target)、追加メモリ O(target)
参考資料
この課題はCodeUtility用に調整されています。上記の説明と制約に従ってください。