SlideShare a Scribd company logo
1 of 11
J : Yu-kun Likes a lot
of Money
原案 : 千田
解答 : 大桃、山本、千田
問題概要
 hマス × wマスのフィールドが与えられる
 フィールドの構成要素は次の通り
 @ : ゆう君の初期位置 道と同様に扱う
 . : 道 自由に通ることができ、費用もかからない
 # : 大きな岩 このマスは通れない
 * : 小さな岩 最初にこのマスを通る際には費用がかかる 費用を払った後は道
になる
 0,1,..,9,a,b,..,z,A,B,..,Z : 財宝 このマスを最初に訪れたときにはお金を得ることが
できる
 ゆう君は隣接する上下左右のいずれかのマスに移動できる
 ゆう君が得られる金額の最大値はいくらか
想定解法
 一行覚えるDP
 左上から順に1マスずつ見ていき、そのマスを取る場合と取
らない場合について考える
 状態を各マスの状態を int で持ち、連結なグループの情報を
記録する
( 連結なグループならグループ番号、グループに属さないな
らば -1 など )
 ゆう君がグループに入ったかどうかを 0 か 1 で記録しておく
 C++ の場合、 vector<int> vec(W+1) を状態としmapなどで管
理する
 最初のW個が各マスの連結グループ番号を表し、最後の1つが
ゆう君がグループに属しているかを表す
想定解法
 C++ での例
 map< vector<int>, int > dp;
vector<int> vec(W+1);
vec[0]からvec[W-1]までは連結なグループの情報を
番号として記録
vec[W]には 0 か 1 でゆう君の初期位置がいずれか
のグループに含まれているかを記録
想定解法
 今みているマスを取らない(ゆう君が訪れない)場合
 黄色の星が別のグループと繋がっているか判定
 繋がっていない場合、非連結なグループができてし
まうので状態を更新しない
( ゆう君がワープしてしまっている )
想定解法
 今みているマスを取らない(ゆう君が訪れない)場合
想定解法
 今みているマスを取らない(ゆう君が訪れない)場合
想定解法
 今みているマスを取る(ゆう君が訪れる)場合
 Union-find木等を利用してグループをまとめる
想定解法
 各マスの処理をした後に、連結なグループ数が1
つだけで、かつゆう君がグループに属していれば
正しい状態なので答えを更新する
想定解法
 グループの状態数はかなり多く見積もると58
 実際はそんなにはない
 毎回Union-Find木で0から順に状態を整理していく
 グループが隣接している場合それらは同じ番号とな
る
 O( h * w * (グループの状態数) * w2 )
提出状況
 First Acceptance
 オンサイト --- ()
 オンライン --- ()

More Related Content

More from NariyoshiChida

More from NariyoshiChida (6)

RUPC2015Day2 - D
RUPC2015Day2 - DRUPC2015Day2 - D
RUPC2015Day2 - D
 
RUPC2015Day2 - F
RUPC2015Day2 - FRUPC2015Day2 - F
RUPC2015Day2 - F
 
RUPC2015Day2 - A
RUPC2015Day2 - ARUPC2015Day2 - A
RUPC2015Day2 - A
 
RUPC2015Day2 - B
RUPC2015Day2 - BRUPC2015Day2 - B
RUPC2015Day2 - B
 
RUPC2015Day2 - H
RUPC2015Day2 - HRUPC2015Day2 - H
RUPC2015Day2 - H
 
RUPC2015Day2 - G
RUPC2015Day2 - GRUPC2015Day2 - G
RUPC2015Day2 - G
 

RUPC2015Day2 - J