締め切りが 2016/09/13 10:00 AM なので,その 1 分後に登録されるように予約
パターゴルフのコースを新しく作ることにしました。
そこで、各ホールの標準打数を考えています。
m ホールで合計の標準打数が n になるように、各ホールの標準打数を決めなければなりません。
なお、各ホールの標準打数は1以上5以下とし、m≦18とします。
例えば、3ホールで合計が12の場合、以下の10通りがあります。
2 5 5
3 4 5
3 5 4
4 3 5
4 4 4
4 5 3
5 2 5
5 3 4
5 4 3
5 5 2
標準入力から m と n がスペースで区切って入力されます。
このとき、各ホールの標準打数のパターン数を標準出力に出力してください。
【入出力サンプル】
標準入力
3 12
標準出力
10
==========
m, n が小さいときの解を網羅して,規則性を見いだす。
規則に従い,以下のような行列(18×90 の行列)を生成する。
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12] [,13] [,14] [,15] [,16] [,17] [,18] [,19] [,20] [,21] [,22] [,23] [,24] [,25]
[1,] 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
[2,] 0 1 2 3 4 5 4 3 2 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
[3,] 0 0 1 3 6 10 15 18 19 18 15 10 6 3 1 0 0 0 0 0 0 0 0 0 0
[4,] 0 0 0 1 4 10 20 35 52 68 80 85 80 68 52 35 20 10 4 1 0 0 0 0 0
[5,] 0 0 0 0 1 5 15 35 70 121 185 255 320 365 381 365 320 255 185 121 70 35 15 5 1
:
:
その行列の m 行,n 列の数値が解である。
f = function(m, n) {
a = matrix(0, 18, 90)
a[1, 1] = 1
x = rep(1, 5)
for (i in 2:18) {
k = i+0:(length(x)-1)
for (j in 0:4) {
a[i, j+k] = a[i, j+k] + x
}
x = a[i, i:(i*5)]
}
cat(a[m, n])
}
> f(3, 12)
[1] 10
> f(5, 21)
[1] 70
> f(9, 35)
[1] 32211
> f(13, 60)
[1] 6175
> f(18, 72)
[1] 2546441085
※コメント投稿者のブログIDはブログ作成者のみに通知されます