teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

n=14の説明を少し修正

2020/05/17 08:58

投稿

hope_mucci
hope_mucci

スコア4447

answer CHANGED
@@ -1,4 +1,4 @@
1
- 解説見ずに私が考案した考え方を載せておきます。(例題が全て正解したのは確認済み)
1
+ 解説見ずに私が考案した考え方を載せておきます。DPを使った解法です。(例題が全て正解したのは確認済み)
2
2
 
3
3
  n<100000で引出金額として取りうるのは次の12通りです。
4
4
  ```
@@ -9,7 +9,7 @@
9
9
  d(2) 以降は、1回目の引出金額をnの超えない範囲で引出パターンから選び、d(n-1回目金額)が最小になるものを回とします。
10
10
  例えば、
11
11
  n=2の場合は、1回目の引出金額が1、二回目以降はd(2-1) == d(1) しかないので、解は2。
12
- n=14の場合は、1回目の引出金額が9,6,1の3パターンあるので、d(5)、d(8)、d(13)のうち最小になるものを探して+1したものが解。このうちd(8)==3が最小なのでd(14)は4。
12
+ n=14の場合は、1回目の引出金額が9,6,1の3パターンあるので、d(5)、d(8)、d(13)のうち最小になるものを探して+1したものが解。このうちd(8)とd(13)3で最小なのでd(14)は4。
13
13
 
14
14
  このようにn=1から順に計算していき、結果を逐次記録しておけばO(n)の計算量で結果が求まります。
15
15
  下記のコードでだいたい300msくらいの処理時間です。