アルゴリズム/DP

ARC087 D: FT Robot

arc087.contest.atcoder.jp 解き方 以下の2つを前計算する x方向に動ける距離:x_0, x_1, ..., x_n y方向に動ける距離:y_0, y_1, ..., y_n 以下のdpを埋める dp[a] := x座標の絶対値をaとすることができる最大の移動回数 同様にyも埋めて、dp[x] = n, dp[y]…

ARC085 D: ABS

D - ABS 解き方 本来は2パターンだけ考えれば良いらしい この手の「何個か取り除いてなくなったら終わり」系のゲームってそういうの多い気がする DPを使った方法 Yがa_iを持ってXに手番が回ってきたときの最大値、Xがa_iを持ってY似て番が回ってきたときの最…

CODE FESTIVAL 2017 qual C D: Yet Another Palindrome Partitioning

code-festival-2017-qualc.contest.atcoder.jp 解き方 O(n)の前計算で、s[i:j]が入れ替えて回文になるかどうかを計算できるようにする s[0:i]の最小の分割数でDPを構成する(O(n^2)) hash値に対するDPとすることでO(n)に高速化 ハマったところ 前計算→DPの流…

CODE FESTIVAL 2017 qual C B: Similar Arrays

code-festival-2017-qualc.contest.atcoder.jp 解き方 a_m...a_nと似ていて、積が偶数である数列b_m...b_nとしてあり得る数列の個数を、m=n, n-1, ..., 1の順序で考える |a_i - b_i| <= 1より、b_iとして考えられる数字は3つ github.com

ARC083 E: Bichrome Tree

E - Bichrome Tree 解き方 ある頂点iの部分木について、黒白それぞれの重みの和を、b_i, w_iとして、それを更新していく 黒白は入れ替えても問題ないので、違う色か同じ色かだけ考えれば良い 頂点iがleafの場合、色はどちらでもよく、重みはx_iになる 頂点i…

ARC083 D: Restoring Road Network

D - Restoring Road Network 解き方 これまでに追加した辺のコストの合計と、その辺による各都市間の最短距離(d[i][j])を保持、更新する 距離が小さい方から順に考えていく。 町i, j間の最短距離がcの時、 もし、d[i][j] == cならば、もう辺を追加する必要は…

ARC081 E: Don't Be a Subsequence

E - Don't Be a Subsequence 解き方 部分列でない最小の文字列の、先頭の文字を決める→2文字目以降の文字列について考える、を繰り返すDP DPする時には、後ろから決めていかないといけない どの文字を先頭にするか決めるために、どの文字がどこに現れるかに…