#arc0103. [arc010_3]積み上げパズル
[arc010_3]積み上げパズル
問題文
高橋君はある日、以下のようなゲームで遊ぶことにしました。
色のブロックが 個、 つずつ順番に落ちてきます。
つ落ちてくるたびに、高橋君は落ちてきたそのブロックを取って山に積むか、積まずに捨てるか選べます。
ブロックを積む山は つで、ブロックは必ず山の一番上に積まないといけません。
全てのブロックが落ちきった後、出来た山は以下のように評価されます。
- 色ボーナス:色ごとに決められた得点が、山に含まれている個数分与えられます。
- コンボボーナス:同じ色のブロックが 個続いて積まれている場合、コンボボーナス配点 に応じて 点が与えられます。
- 全色ボーナス:山の中に 色のブロックがそれぞれ 個以上含まれていると 点が与えられます。
落ちてくるブロックの種類と順番、またそれぞれ山を評価するための配点が与えられたとき、評価で得ることのできる最高得点を求めなさい。
入力
入力は以下の形式で標準入力から与えられる。
- 行目に が半角スペースで区切られて与えられる。
- はブロックの個数で を満たす。
- はブロックの色の総数で を満たす。
- はコンボボーナス配点で を満たす。
- は全色ボーナス配点で を満たす。
- は全て整数である。
- 行目からの 行目までの 行で色ボーナスの配点がそれぞれ与えられる。
- は 番目に与えられるブロックの色である。
- は に対する色ボーナスの配点である。
- は英大文字(
A
-Z
)、 は を満たす。 - 配点は重複して与えられない( ならば )
- 行目には落ちてくるブロックの順序を表す長さ の文字列が与えられる。
- は 番目に落ちてくるブロックの色を表している。
- は のいずれかである。
出力
評価で得ることのできる得点の最大値を標準出力に 行で出力せよ。
なお、最後には改行を出力せよ。
入力例 1
5 3 3 5
R 1
G 1
B 1
RGBRR
出力例 1
13
-
全てのブロックを山に積むと、
- 色ボーナス:どの色も配点が 点なので、 点 × 個 \= 5点
- コンボボ−ナス:Rが 個連続しているので、 点
- 全色ボーナス:全ての色が つ以上山に積まれているので、 点
により、 点が与えられます。
-
いずれかのブロックを捨てるとこの点数よりも低くなるので、答えは 点です。
入力例 2
3 3 3 5
R 1
G 3
B 2
RBR
出力例 2
5
-
全てのブロックを山に積むと、
- 色ボーナス: 点 個 点 個 点
- 連続していないのでコンボボーナス、Gが含まれていないので全色ボーナスはそれぞれ 点
により、 点です。
-
しかし、Bを捨ててRRを山に積むと、
- 色ボーナス: 点 個 点
- コンボボーナス: 点
で、 点が最高得点です。
入力例 3
8 3 5 3
R 1
G 1
B 1
RRGRRBRR
出力例 3
31
- 図 のように順に 個のブロックが落ちてきます。
- ブロックを全部山に積むと、図 のように、 個のコンボが 組できます。
- また、全色ボーナスもつくので、 点 × 個 + 点 組 点 \= 26 点です。
- しかし、図 のようにRのみを山に積むと、 点 × 個 + 点 点 \= 31 点になります。
- Rだけ山に積むとき最高得点となり、 が答えです。
入力例 4
8 3 5 3
R 1
G 100
B 1
RRGRRBRR
出力例 4
126
- 全部積んだ場合(図 ): 点 + 点 組 点 \= 125 点
- Rのみを積んだ場合(図 ): 点 + 点 点 \= 31 点
- B以外を積んだ場合(図 ): 点 + 点 点 \= 126 点
- したがって、最高得点は 点です。