C♯の勉強

C♯4.0 で TopCoder の過去問を解きます。

Div2Hard

TopCoder SRM 591: YetAnotherTwoTeamsProblem

最小のスキルの固定して、|skill| 分だけ動的計画法すると O(50 * 50 * 50 * 60000) でTLE。スキルが高い順に足していくと、最後に足されたスキルが最小のスキルになる。 そのことを利用して、昇順からナップサップの動的計画法をしていく、いざ足し合わせる…

TopCoder SRM 590: FoxAndShogi

問題文各列の状態はそれぞれ独立しているので、各列ごとに状態数を求めてそれらを掛け合わせる。 列ごとの状態数については、上からコマを置いていって、「何番目のコマか」と「コマを置ける一番上の場所」で DP する。 public class FoxAndShogi { const in…

TopCoder SRM 588: GameInDarknessDiv2

問題文アリスが移動できなくなるまで幅優先探索すればよい。 DP してもいいけれど、やっていることは結局同じになる。 public class GameInDarknessDiv2 { int[] dx = { 0, 1, 0, -1 }; int[] dy = { 1, 0, -1, 0 }; string ds = "DRUL"; struct Point { pub…

TopCoder SRM 589: FlippingBitsDiv2

問題文メモ付き探索する場合は、Nullableの配列を使うと初期化する必要がなくなるので楽メモ配列へのアクセスに Array.SetValue/GetValue を使うようにすると、メモ化に使うパラメタに破壊的代入してもバグらなくなる。追記:ただし、非常に速度が遅いので取…