[BOJ]キーボード(no.158)
4835 ワード
質問する
キーボードはkriiが作った不思議なキーボードです.キーボードには4つのボタンしかありません.
画面にAを出力します.
CTRL-A:フルスクリーン選択
CTRL-C:選択したすべてのコンテンツをバッファにコピー
CTRL-V:バッファが空でない場合は、バッファの内容を画面出力文字列の真後ろに貼り付けます.
キーボードのボタンをN回押して、画面に出力されるAの数を最大にするプログラムを作成してください.
入力
第1行はN(1≦N≦100)を与える.
しゅつりょく
キーボードのボタンをN回押して、画面に出力できるA個の数の最値を出力します.
🤔 の意見を打診
ああ本当に辛いですね...
注釈
dp[i]:i回で出力可能な最大A数
ヶーシング
dp[i] = dp[i-1] + 1
dp[i] = 2*dp[i-3]
4番は前でずっと押すことができます(コピーは1回に何度でも貼り付けることができます)
i-4の値をコピーするとします.すると、合計2回iが貼り付けられるので、i-4の出力値は3倍になります.
dp[i] = 3*dp[i-4]
以下と正式化できる.二重for文でjという変数があると仮定する.dp[i] = j*dp[i-(j+1)]
これまでの価格の中で、最も高いのは点火式だったはずだ.🔥 てんかしき dp[i] = max(dp[i-1]+1, j*dp[n-(j+1)])
📌 説明する
import sys
input = sys.stdin.readline
N = int(input())
dp = [0]*101
dp[0] = 0; dp[1] = 1; dp[2] = 2; dp[3] = 3
for i in range(4,N+1):
for j in range(2,i-2):
dp[i] = max(dp[i-1]+1, j*dp[i-(j+1)], dp[i])
print(dp[N])
レビュー
難しいですね。他のDPよりも、分機キャビネットの方が複雑です。 答えが出る前に、どれだけの症例があるかを考える習慣を身につけたと思います。 やっぱり練習が答えです。よく考えてから手配しましょう。
Reference
この問題について([BOJ]キーボード(no.158)), 我々は、より多くの情報をここで見つけました https://velog.io/@wisepine/BOJ-크리보드-no.11058テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol