Upload
yuma-inoue
View
774
Download
2
Embed Size (px)
Citation preview
C.積み上げパズル
m色のブロックがn個、順番に落ちてくる
プレイヤーは落ちてきたブロックを取って山に積むか、取らずに捨てるか逐次選べる
最終的な山を見て、以下の通り得点がつく
色ボーナス:ブロック1つ当たり、色によって定められた得点を得る
コンボボーナス:同じ色がn色続いている部分1つにつき、A×(n-1)点加算
コンプボーナス:m色全部が山に入っているとB点加算
落ちてくるブロックの種類・順番と配点が与えられたとき、とりうる得点の最大値を求めよ
問題概要
入出力形式・制約
Sample Input
5 3 3 5
R 1
G 1
B 1
RGBRR
Sample Output
13
全部とると ,13点となる
色ボーナス: 1×3 + 1×1 + 1×1 = 5
コンボボーナス: 3×(2-1) = 3
コンプボーナス: 5
例1
1
1
1
1
1
落ちてくる 取り方
コンプ
2コンボ
Sample Input
3 3 3 5
R 1
G 3
B 2
RBR
Sample Output
5
全部とると ,4+0+0=4点
Bだけ捨ててRRと取ると ,2+3+0=5点
よって最高はRRと取ったときの5点
例2
1
2
1
落ちてくる 取り方1
2コンボ
1
1
取り方2
Sample Input
8 3 5 3
R 1
G 1
B 1
RRGRRBRR
Sample Output
31
全部とると ,8+(5+5+5)+3=26点
Rだけとると ,6+25+0=31点
例3
1
1
1
1
落ちてくる 取り方1
コンプ
2コンボ
1
1
1
1
2コンボ
2コンボ
1
1
取り方2
6コンボ1
1
1
1
Sample Input
8 3 5 3
R 1
G 100
B 1
RRGRRBRR
Sample Output
126
全部とると ,107+(5+5+5)+3=125点
Rだけとると ,6+25+0=31点
B以外とると ,106+(5+15)+0=126点
例4
1
100
1
1
取り方1
コンプ
2コンボ
1
1
1
1
2コンボ
2コンボ
1
1
取り方2
6コンボ1
1
1
1
1
1
取り方3
2コンボ
1
1
1
1
100
4コンボ
想定解法
A×(6-1)
A A A
A A
=A×5
=A×5
プロコンガチ勢には耳タコなので読み飛ばして下さい
動的計画法は、同一と見なせる状態をまとめて記憶することで、探索回数を減らすアルゴリズム
今回の場合、 i番目までのブロックがどんな並びであるかは、 i+1
番目以降のブロックを選んだときの点数に影響しないので、覚えておく必要がない(=同じと見なしてよい)
ただし、ボーナスのために以下の情報だけは必要なのでメモする 一個前の色が同じならコンボボーナスなので、一個前の色が何色か
全色含まれているとコンプボーナスなので、今までどの色を使ったか
よって、DP[何番目のブロック][直前の色][使った色(bit)]
使った色(bit)とは、k番目の色を使ったときk番目のbitが立っているような二進列で記憶できる、という意味
動的計画法(DP)
想定解法
全探索でTLE
テーブル再利用せずにMLE(これは単純にMLE緩くして易化してもいいかも)
法則性を探しての貪欲法チックな解法 コンボ・コンプの優先順位を付けようとするなど
もしかしたら貪欲解あるかもしれないけど思いついてない(なさそう)
Rに全色が現れるとは限らないため絶対コンプボーナスを取れないケースもある(例2)
実はマイナスポイントもちゃっかり許しているのでハマるかも なにも取らないで0点が最高得点のケースもあり得る
負のコンボボーナスでコンボすればするほど点が減ったり
コンボ作れないから全部取りすると負のコンプボーナスでやられたり
テーブルの初期化を0や-1でやるとWA(e.g.マイナスブロック取りまくってコンプボーナスとか)
やらかすかもしれないところ
元ネタ