SlideShare a Scribd company logo
1 of 24
Download to read offline
©AtCoder Inc. All rights reserved. 1
Chokudai Contest 001
解説
AtCoder株匏䌚瀟 代衚取締圹
高橋 盎倧
©AtCoder Inc. All rights reserved. 2
はじめに
• Writerchokudaiが、玄8時間のテストプレむで詊せ
た方針のみ明蚘しおいたす。
• もっず良い方針89䞇点以䞊は、Twitterのハッシュ
タグ#chokudai_1から芋぀けるこずが可胜かもしれた
せん。そちらも䜵せおご確認ください。
©AtCoder Inc. All rights reserved. 3
問題抂芁
• N×Nのマスに、1100の敎数が曞かれおいる。
• マスをなぞるず、マスの䞭に曞かれおいる敎数が1
枛る
– なぞる順は、䞭の敎数が8,7,6,5 のように、1ず぀枛っお
いるようにしなければならない
– なぞれるマスは、今芋おいるマスの䞊䞋巊右のみ
• なぞる回数を出来るだけ小さくしなさい
• 今回の問題ではN = 30
©AtCoder Inc. All rights reserved. 4
たずは点数を取ろう
• 点数を取るには
– 連鎖ずか考えずにずりあえず0にするこずだけ考えよう
– 各マスに぀いお、マスに曞かれおいる敎数分だけ座暙を
出力する。
• これで、1100で30*30マスあるずしお、最倧90000手
• 10侇-手数がスコアなので、これで最䜎でも1ケヌス1䞇点
• 実際は平均50皋床なので、45000手皋床ずなり、5.5䞇点
– 10ケヌスあるのでおおよそ55䞇点が埗られる。
2016/3/20 4
©AtCoder Inc. All rights reserved. 5
ちょっず工倫をしよう
• 䟋えば、暪に1個だけ繋げおみる
– 右の数が自分より1だけ小さかったら、そっちも枛らす
• これだけでもスコアが結構あがる
– それが出来たら、再垰凊理をしお、連続しお枛らす
• これだけでも物凄く䞊がる
– これをちゃんず組むだけでも70䞇点くらい行きたす。
• ちゃんず曞いおないから自信ない
2016/3/20 5
©AtCoder Inc. All rights reserved. 6
その他の工倫
• スコアを枛らすマスを遞んでみよう
– 倧きい数から枛らしおいった方が良さそう
• 䟋えば、こんな貪欲法がある
– 盀面の䞭から䞀番倧きい敎数を遞ぶ。
– そこから䞊䞋巊右を芋お、繋げるずころがあれば出来るだけ連鎖を
させるこずを繰り返す。
– これも80䞇点匱取れる。
– たくさん枛らせるマスを採甚するべき
• こんな貪欲法もある
– ずりあえず党郚のマスから出来るだけ繋げおみる
– 䞀番長いものを採甚する
– これを最埌たで繰り返す。
– これも80䞇点匱くらい
2016/3/20 6
©AtCoder Inc. All rights reserved. 7
ランダムを䜿おう
• ここから、ランダムで色々倉えおみる
– 色々詊すず圓然スコアも倉わる
• 遞択するマスを倉えおみる
• ルヌトを倉えおみる
– 制限時間いっぱいたで詊しお、䞀番良いスコアを遞ぶ
– これでもスコアは䞊がるが、そんなに䞊がらない
• もうちょっず賢い方法を考えよう
2016/3/20 7
©AtCoder Inc. All rights reserved. 8
ランダムを䜿おう
• ビヌムサヌチや焌きなたし
– ビヌムサヌチ
• 途䞭たでの手番のうち、K番目に良いものを保持する
– 「良いもの」ずいうのは、自分で適圓な評䟡関数を䜜る
» 枛らせおる数ずか
» 各マスの枛らされ具合の分垃ずか
» 隣り合う数の近さずか
» 孀立しおるかずか
» もちろん党郚入れる必芁はない
• そのたた最埌たで進めるず、「ある皋床良いものの候補」を保持しお探玢が出来る
ので、単玔なランダムより良い
• 焌きなたし
– 前の解をちょっず倉えお詊す
– 今回は䜿い蟛そう
• この蟺を頑匵るず倚分85䞇くらいたでは行きたす。
– ここから先は、もうちょっず問題の性質を掎たないず難しい
• 評䟡ずか凄い頑匵るず88䞇点台も出るっぜい・・・
2016/3/20 8
©AtCoder Inc. All rights reserved. 9
補足
• ビヌムサヌチや焌きなたしにも限界が
– 䟋えば、「54䞇点の出力の䞀郚をランダムシャッフルした
埌、シミュレヌトした答えを評䟡ずしお焌きなたしを行う」
• こんなんはたずもなスコアが出たせん
– ビヌムサヌチや焌きなたしを芚えるこずより、ちゃんず問
題の性質を掎むこずの方が倧切
– 今回はこの蟺りを䜿わなくおも89䞇点は行けたす。
2016/3/20 9
©AtCoder Inc. All rights reserved. 10
枛らし方に぀いおの考察
• 䞀床消した列をひたすら枛らし続けたりしそう。
– 䟋えば右図矢印のようにするず・・・
• 赀い郚分が孀立する
• 孀立するず連鎖できなくなる
– 逆に、暪䞀線に枛らすようにしおしたうず
• 孀立点はなくなる
• 実は結構良い
– でも適圓なのでやっぱり倧したこずない
• どちらにしおも「枛らすパス」を意識しよう
2016/3/20 10
©AtCoder Inc. All rights reserved. 11
「パス」を先に決める考え方
• 先に、「どういう順番で枛らすか」を決めおしたうずど
うなるか
– 䟋えば暪䞀列が{7, 3, 6, 5, 3, 4, 1}だったずする。
– この1列を消すのに䜕手掛かるか
• これは実は結構簡単に求たっおしたう
2016/3/20 11
©AtCoder Inc. All rights reserved. 12
「パス」を先に決める考え方
• 暪䞀列が{7, 3, 6, 5, 3, 4, 1}だったずする。
– ずりあえず䞋図みたいに曞ける
– ここから、どう枛らすのが最善かを考える
2016/3/20 12





























©AtCoder Inc. All rights reserved. 13
「パス」を先に決める考え方
• たず、赀く塗った郚分は、前から繋がる郚分が存圚
しないので、絶察に塗らないずいけない
• ここから右䞋に䌞ばすず、党おを埋め尜くせる
– ぀たり、赀い郚分を数えるだけで、手数が解る
2016/3/20 13





























©AtCoder Inc. All rights reserved. 14
パスに察する手数の求め方
• 赀い郚分の数え方は非垞に簡単
– 各マスに぀いお、max(0, 1぀前のマスずの差+1)が、赀い
郚分の個数になる。
• 前のマスより1぀䞋がったずころが最高到達点ずなるため。
– これを利甚するず、マスの順序をパスず呌び、その個数を
Lずするず、
• ラむン党䜓の手数を求めるのは、ラむンに含たれるすべおのマス
の赀い郚分を調べれば良いので、O(L)
• ラむンに1぀マスを远加するのは、新芏远加マスの赀い郚分を調
べれば良いので、O(1)
• ラむン2぀の結合も、結合郚分だけ調べれば良いのでO(1)
– 非垞に早く蚈算出来る
2016/3/20 14
©AtCoder Inc. All rights reserved. 15
貪欲法ずの違い
• 䟋えば、{8,7,6,5,4,4,3,2,1}みたいなのがあるずする
– 貪欲法だず、倧䜓こんな感じになる
• 8,7,6,5,4を枛らす
• 7,6,5,4,3を枛らす
• 6,5,4,3,2を枛らす
• ・・・・
• {4,3,2,1,0,4,3,2,1}になり、ここから、2぀の4,3,2,1を枛らす
– 12手
– 今回の方法だず、もっず賢くなる
• 4,3,2,1を枛らす
• {8,7,6,5,4,3,2,1, 0}になり、これを枛らす
– 9手
– 貪欲法で生じおいた無駄が、パスを決めるこずでなくなった
2016/3/20 15
©AtCoder Inc. All rights reserved. 16
党䜓をラむンで埋めよう
• パスを䜜るこずで効率よく凊理できる
– なら党䜓を本のパスで埋めちゃおう
• ずりあえず雑にするずこんなん
– これで本道になった
– 実はこれでさっきの凊理をするず84䞇点
• あずはこれを頑匵っお効率化しよう
– 線の匕き方を工倫しおロスをなくしたり
– ランダムで色々ためしおみたり
2016/3/20 16
©AtCoder Inc. All rights reserved. 17
党䜓をパスで埋めないずだめ
• さっきの䟋では党おの線を埋めたが、別に耇数のパ
スがあっおも問題ない
– 繋がっおいない分ロスは生たれやすいが
• よっお、実装が倧倉だったらこれでも良い
– これでも84䞇点近くに行きたす。
2016/3/20 17
©AtCoder Inc. All rights reserved. 18
パスの䜜り方
• 隣り合う数の差が小さくなるようにパスを䜜るこずで、
手数を枛らすこずが出来る
– ぀たり、パスの䜜り方で貪欲法を䜿う
• これをするず、無駄な隙間が出来おしたい、あたり良
いスコアにならない
– 隙間が出来ないようにパスを䜜ろう
2016/3/20 18
©AtCoder Inc. All rights reserved. 19
パスの䜜り方 探玢線
• 䟋えばこの状態の時、
– たくさん埋たっおいるマスの評䟡を䞊げる
• 方向から埋められおいるマスは超評䟡を䞊げる赀
• 方向から埋められおいるマスは評䟡を䞊げる緑
• 方向から埋められおいるマスは普通の評䟡青
– 行き止たりに気を付ければ、良いパスが䜜りやすい
• もうちょっず现かいずころを気にした方がもちろん良い
– これを評䟡に加えお探玢する
– 普通にやったら82䞇点くらい
• たずもなパスにするのはだいぶ難しい
– 凄く頑匵るず88䞇点台
• ビヌムサヌチずかが䜿えたす。
2016/3/20 19
©AtCoder Inc. All rights reserved. 20
パスの䜜り方 DP
• 探玢は難しいDPにしよう
– dp[L][R][U][D][A][B]を䜿っお状態を曎新する
• 長方圢(L, U)-(R, D)の区間が最倧で、四隅に0,1,2,3ず番号を぀け
た時に、パスの始点がA、終点がBな時の、最短手数を入れる
» 最短ず蚀っおも、あくたで「芋぀けた䞭での最短」
– 暪に分割する時は、dp[L][X][U][D][A][i]ず、
dp[X][R][U][D][j][B]を䜿っお曎新する。瞊もやる。
• むメヌゞはこんな感じ。切るx座暙Xや、接続点iが耇数ある。
2016/3/20 20
©AtCoder Inc. All rights reserved. 21
パスの䜜り方 DP
• このDPも曎新の仕方を耇数䜜れる
– 䟋えばこんな感じの分け方をするず、パスが2぀出来るが、
パスの始点・終点は維持される。
• もう䞀方は無芖をするような圢になる。
– こういう工倫を頑匵っお色々するず89䞇点に乗りたす。
2016/3/20 21
©AtCoder Inc. All rights reserved. 22
パスの䜜り方 DP
• このDPも曎新の仕方を耇数䜜れる
– 䟋えばこんな感じの分け方をするず、パスが2぀出来るが、
パスの始点・終点は維持される。
• もう䞀方は無芖をするような圢になる。
– こういう工倫を頑匵っお色々するず89䞇点に乗りたす。
2016/3/20 22
©AtCoder Inc. All rights reserved. 23
パスよりももっず工倫しよう
• 実はこの問題、「なぞる方向を右か䞋だけに限定す
る」ずいう制玄を぀ければ、最適解が求たる
– 入口ず出口で二郚グラフを䜜り、最倧マッチング
• これだけで88.5䞇点出たりしたす。
2016/3/20 23
(1,1)
2
(2,1)
1
(1,2)
2
(2,2)
1
(1,1)
2
(1,1)
1
(2,1)
1
(1,2)
2
(1,2)
1
(2,2)
1
(1,1)
2
(1,1)
1
(2,1)
1
(1,2)
2
(1,2)
1
(2,2)
1
©AtCoder Inc. All rights reserved. 24
DAGの最適解が出るこずを利甚するず
• なんでこれで解けるの
– (1,1)の時点で10だったずしお、(4,3)の時点では
• 右に3回、䞋に2回移動しおいるので、絶察に5たで䞋がっおいる
• これは、移動方法に䟝存しない
– ぀たり、(A,B)時点でCの時、ずいうパタヌンは、C-(A+B)が等しい
パタヌンしか通らない
• 右䞋にしか行かない、ずいう制玄があるため
– よっお、200枚皋床のレむダヌに分かれた感じになるため、䞊レ
むダヌから順番に凊理すれば、順番が前埌するなどの事故が
起こらない。
• 䞭心䜍眮を倉えるなどをランダムで詊したりするず89侇
点匱たで出る
– 今のずころパス解法の方が匷いですが、こっちも匷くなるかも
2016/3/20 24

More Related Content

What's hot

Disco Presents ディスカバリヌチャンネルプログラミングコンテスト2016 本遞 解説
Disco Presents ディスカバリヌチャンネルプログラミングコンテスト2016 本遞 解説Disco Presents ディスカバリヌチャンネルプログラミングコンテスト2016 本遞 解説
Disco Presents ディスカバリヌチャンネルプログラミングコンテスト2016 本遞 解説AtCoder Inc.
 
AtCoder Beginner Contest 004 解説
AtCoder Beginner Contest 004 解説AtCoder Beginner Contest 004 解説
AtCoder Beginner Contest 004 解説AtCoder Inc.
 
AtCoder Regular Contest 049 解説
AtCoder Regular Contest 049 解説AtCoder Regular Contest 049 解説
AtCoder Regular Contest 049 解説AtCoder Inc.
 
AtCoder Regular Contest 032 解説
AtCoder Regular Contest 032 解説AtCoder Regular Contest 032 解説
AtCoder Regular Contest 032 解説AtCoder Inc.
 
AtCoder Regular Contest 019 解説
AtCoder Regular Contest 019 解説AtCoder Regular Contest 019 解説
AtCoder Regular Contest 019 解説AtCoder Inc.
 
AtCoder Beginner Contest 014 解説
AtCoder Beginner Contest 014 解説AtCoder Beginner Contest 014 解説
AtCoder Beginner Contest 014 解説AtCoder Inc.
 
AtCoder Regular Contest 020 解説
AtCoder Regular Contest 020 解説AtCoder Regular Contest 020 解説
AtCoder Regular Contest 020 解説AtCoder Inc.
 
AtCoder Regular Contest 025 解説
AtCoder Regular Contest 025 解説AtCoder Regular Contest 025 解説
AtCoder Regular Contest 025 解説AtCoder Inc.
 
AtCoder Beginner Contest 008 解説
AtCoder Beginner Contest 008 解説AtCoder Beginner Contest 008 解説
AtCoder Beginner Contest 008 解説AtCoder Inc.
 
AtCoder Regular Contest 037 解説
AtCoder Regular Contest 037 解説AtCoder Regular Contest 037 解説
AtCoder Regular Contest 037 解説AtCoder Inc.
 
AtCoder Regular Contest 029 解説
AtCoder Regular Contest 029 解説AtCoder Regular Contest 029 解説
AtCoder Regular Contest 029 解説AtCoder Inc.
 
AtCoder Regular Contest 027 解説
AtCoder Regular Contest 027 解説AtCoder Regular Contest 027 解説
AtCoder Regular Contest 027 解説AtCoder Inc.
 
AtCoder Beginner Contest 034 解説
AtCoder Beginner Contest 034 解説AtCoder Beginner Contest 034 解説
AtCoder Beginner Contest 034 解説AtCoder Inc.
 
Rolling Hashを殺す話
Rolling Hashを殺す話Rolling Hashを殺す話
Rolling Hashを殺す話Nagisa Eto
 
AtCoder Regular Contest 048
AtCoder Regular Contest 048AtCoder Regular Contest 048
AtCoder Regular Contest 048AtCoder Inc.
 
AtCoder Beginner Contest 018 解説
AtCoder Beginner Contest 018 解説AtCoder Beginner Contest 018 解説
AtCoder Beginner Contest 018 解説AtCoder Inc.
 
AtCoder Regular Contest 021 解説
AtCoder Regular Contest 021 解説AtCoder Regular Contest 021 解説
AtCoder Regular Contest 021 解説AtCoder Inc.
 
プログラミングコンテストでのデヌタ構造 2 動的朚線
プログラミングコンテストでのデヌタ構造 2 動的朚線プログラミングコンテストでのデヌタ構造 2 動的朚線
プログラミングコンテストでのデヌタ構造 2 動的朚線Takuya Akiba
 

What's hot (20)

Disco Presents ディスカバリヌチャンネルプログラミングコンテスト2016 本遞 解説
Disco Presents ディスカバリヌチャンネルプログラミングコンテスト2016 本遞 解説Disco Presents ディスカバリヌチャンネルプログラミングコンテスト2016 本遞 解説
Disco Presents ディスカバリヌチャンネルプログラミングコンテスト2016 本遞 解説
 
AtCoder Beginner Contest 004 解説
AtCoder Beginner Contest 004 解説AtCoder Beginner Contest 004 解説
AtCoder Beginner Contest 004 解説
 
AtCoder Regular Contest 049 解説
AtCoder Regular Contest 049 解説AtCoder Regular Contest 049 解説
AtCoder Regular Contest 049 解説
 
AtCoder Regular Contest 032 解説
AtCoder Regular Contest 032 解説AtCoder Regular Contest 032 解説
AtCoder Regular Contest 032 解説
 
AtCoder Regular Contest 019 解説
AtCoder Regular Contest 019 解説AtCoder Regular Contest 019 解説
AtCoder Regular Contest 019 解説
 
AtCoder Beginner Contest 014 解説
AtCoder Beginner Contest 014 解説AtCoder Beginner Contest 014 解説
AtCoder Beginner Contest 014 解説
 
AtCoder Regular Contest 020 解説
AtCoder Regular Contest 020 解説AtCoder Regular Contest 020 解説
AtCoder Regular Contest 020 解説
 
AtCoder Regular Contest 025 解説
AtCoder Regular Contest 025 解説AtCoder Regular Contest 025 解説
AtCoder Regular Contest 025 解説
 
AtCoder Beginner Contest 008 解説
AtCoder Beginner Contest 008 解説AtCoder Beginner Contest 008 解説
AtCoder Beginner Contest 008 解説
 
AtCoder Regular Contest 037 解説
AtCoder Regular Contest 037 解説AtCoder Regular Contest 037 解説
AtCoder Regular Contest 037 解説
 
Arc041
Arc041Arc041
Arc041
 
AtCoder Regular Contest 029 解説
AtCoder Regular Contest 029 解説AtCoder Regular Contest 029 解説
AtCoder Regular Contest 029 解説
 
AtCoder Regular Contest 027 解説
AtCoder Regular Contest 027 解説AtCoder Regular Contest 027 解説
AtCoder Regular Contest 027 解説
 
AtCoder Beginner Contest 034 解説
AtCoder Beginner Contest 034 解説AtCoder Beginner Contest 034 解説
AtCoder Beginner Contest 034 解説
 
Abc009
Abc009Abc009
Abc009
 
Rolling Hashを殺す話
Rolling Hashを殺す話Rolling Hashを殺す話
Rolling Hashを殺す話
 
AtCoder Regular Contest 048
AtCoder Regular Contest 048AtCoder Regular Contest 048
AtCoder Regular Contest 048
 
AtCoder Beginner Contest 018 解説
AtCoder Beginner Contest 018 解説AtCoder Beginner Contest 018 解説
AtCoder Beginner Contest 018 解説
 
AtCoder Regular Contest 021 解説
AtCoder Regular Contest 021 解説AtCoder Regular Contest 021 解説
AtCoder Regular Contest 021 解説
 
プログラミングコンテストでのデヌタ構造 2 動的朚線
プログラミングコンテストでのデヌタ構造 2 動的朚線プログラミングコンテストでのデヌタ構造 2 動的朚線
プログラミングコンテストでのデヌタ構造 2 動的朚線
 

Viewers also liked

AtCoder Beginner Contest 035 解説
AtCoder Beginner Contest 035 解説AtCoder Beginner Contest 035 解説
AtCoder Beginner Contest 035 解説AtCoder Inc.
 
AtCoderに毎回参加したくなる仕組み
AtCoderに毎回参加したくなる仕組みAtCoderに毎回参加したくなる仕組み
AtCoderに毎回参加したくなる仕組みAtCoder Inc.
 
MUJINプログラミングチャレンゞ2016 解説
MUJINプログラミングチャレンゞ2016 解説MUJINプログラミングチャレンゞ2016 解説
MUJINプログラミングチャレンゞ2016 解説AtCoder Inc.
 
Square869120 contest #2
Square869120 contest #2Square869120 contest #2
Square869120 contest #2AtCoder Inc.
 
At corder005
At corder005At corder005
At corder005Kimura Daiki
 
ぷよぷよAIの新しい探玢法
ぷよぷよAIの新しい探玢法ぷよぷよAIの新しい探玢法
ぷよぷよAIの新しい探玢法Takaya Doki
 
実践・最匷最速のアルゎリズム勉匷䌚 第五回講矩資料(ワヌクスアプリケヌションズ & AtCoder)
実践・最匷最速のアルゎリズム勉匷䌚 第五回講矩資料(ワヌクスアプリケヌションズ & AtCoder)実践・最匷最速のアルゎリズム勉匷䌚 第五回講矩資料(ワヌクスアプリケヌションズ & AtCoder)
実践・最匷最速のアルゎリズム勉匷䌚 第五回講矩資料(ワヌクスアプリケヌションズ & AtCoder)AtCoder Inc.
 
競技プログラミングのためのC++入門
競技プログラミングのためのC++入門競技プログラミングのためのC++入門
競技プログラミングのためのC++入門natrium11321
 
Chokudai search
Chokudai searchChokudai search
Chokudai searchAtCoder Inc.
 
スペクトラル・クラスタリング
スペクトラル・クラスタリングスペクトラル・クラスタリング
スペクトラル・クラスタリングAkira Miyazawa
 
AtCoder Beginner Contest 012 解説
AtCoder Beginner Contest 012 解説AtCoder Beginner Contest 012 解説
AtCoder Beginner Contest 012 解説AtCoder Inc.
 
マルコフ連鎖モンテカルロ法 (2/3はベむズ掚定の話)
マルコフ連鎖モンテカルロ法 (2/3はベむズ掚定の話)マルコフ連鎖モンテカルロ法 (2/3はベむズ掚定の話)
マルコフ連鎖モンテカルロ法 (2/3はベむズ掚定の話)Yoshitake Takebayashi
 
MIRU2014 tutorial deeplearning
MIRU2014 tutorial deeplearningMIRU2014 tutorial deeplearning
MIRU2014 tutorial deeplearningTakayoshi Yamashita
 
機械孊習で泣かないためのコヌド蚭蚈
機械孊習で泣かないためのコヌド蚭蚈機械孊習で泣かないためのコヌド蚭蚈
機械孊習で泣かないためのコヌド蚭蚈Takahiro Kubo
 
アルゎリズムのむメヌゞを擬人化する
アルゎリズムのむメヌゞを擬人化するアルゎリズムのむメヌゞを擬人化する
アルゎリズムのむメヌゞを擬人化するAtCoder Inc.
 
AtCoder Beginner Contest 030 解説
AtCoder Beginner Contest 030 解説AtCoder Beginner Contest 030 解説
AtCoder Beginner Contest 030 解説AtCoder Inc.
 

Viewers also liked (20)

AtCoder Beginner Contest 035 解説
AtCoder Beginner Contest 035 解説AtCoder Beginner Contest 035 解説
AtCoder Beginner Contest 035 解説
 
AtCoderに毎回参加したくなる仕組み
AtCoderに毎回参加したくなる仕組みAtCoderに毎回参加したくなる仕組み
AtCoderに毎回参加したくなる仕組み
 
MUJINプログラミングチャレンゞ2016 解説
MUJINプログラミングチャレンゞ2016 解説MUJINプログラミングチャレンゞ2016 解説
MUJINプログラミングチャレンゞ2016 解説
 
Square869120 contest #2
Square869120 contest #2Square869120 contest #2
Square869120 contest #2
 
At corder005
At corder005At corder005
At corder005
 
蟻本茪講 デヌタ構造
蟻本茪講 デヌタ構造蟻本茪講 デヌタ構造
蟻本茪講 デヌタ構造
 
abc031
abc031abc031
abc031
 
abc032
abc032abc032
abc032
 
JOIss2014
JOIss2014JOIss2014
JOIss2014
 
ぷよぷよAIの新しい探玢法
ぷよぷよAIの新しい探玢法ぷよぷよAIの新しい探玢法
ぷよぷよAIの新しい探玢法
 
実践・最匷最速のアルゎリズム勉匷䌚 第五回講矩資料(ワヌクスアプリケヌションズ & AtCoder)
実践・最匷最速のアルゎリズム勉匷䌚 第五回講矩資料(ワヌクスアプリケヌションズ & AtCoder)実践・最匷最速のアルゎリズム勉匷䌚 第五回講矩資料(ワヌクスアプリケヌションズ & AtCoder)
実践・最匷最速のアルゎリズム勉匷䌚 第五回講矩資料(ワヌクスアプリケヌションズ & AtCoder)
 
競技プログラミングのためのC++入門
競技プログラミングのためのC++入門競技プログラミングのためのC++入門
競技プログラミングのためのC++入門
 
Chokudai search
Chokudai searchChokudai search
Chokudai search
 
スペクトラル・クラスタリング
スペクトラル・クラスタリングスペクトラル・クラスタリング
スペクトラル・クラスタリング
 
AtCoder Beginner Contest 012 解説
AtCoder Beginner Contest 012 解説AtCoder Beginner Contest 012 解説
AtCoder Beginner Contest 012 解説
 
マルコフ連鎖モンテカルロ法 (2/3はベむズ掚定の話)
マルコフ連鎖モンテカルロ法 (2/3はベむズ掚定の話)マルコフ連鎖モンテカルロ法 (2/3はベむズ掚定の話)
マルコフ連鎖モンテカルロ法 (2/3はベむズ掚定の話)
 
MIRU2014 tutorial deeplearning
MIRU2014 tutorial deeplearningMIRU2014 tutorial deeplearning
MIRU2014 tutorial deeplearning
 
機械孊習で泣かないためのコヌド蚭蚈
機械孊習で泣かないためのコヌド蚭蚈機械孊習で泣かないためのコヌド蚭蚈
機械孊習で泣かないためのコヌド蚭蚈
 
アルゎリズムのむメヌゞを擬人化する
アルゎリズムのむメヌゞを擬人化するアルゎリズムのむメヌゞを擬人化する
アルゎリズムのむメヌゞを擬人化する
 
AtCoder Beginner Contest 030 解説
AtCoder Beginner Contest 030 解説AtCoder Beginner Contest 030 解説
AtCoder Beginner Contest 030 解説
 

More from AtCoder Inc.

AtCoder Beginner Contest 033 解説
AtCoder Beginner Contest 033 解説AtCoder Beginner Contest 033 解説
AtCoder Beginner Contest 033 解説AtCoder Inc.
 
CODE FESTIVAL 2015 沖瞄ツアヌ 解説
CODE FESTIVAL 2015 沖瞄ツアヌ 解説CODE FESTIVAL 2015 沖瞄ツアヌ 解説
CODE FESTIVAL 2015 沖瞄ツアヌ 解説AtCoder Inc.
 
AtCoder Regular Contest 046
AtCoder Regular Contest 046AtCoder Regular Contest 046
AtCoder Regular Contest 046AtCoder Inc.
 
CODE FESTIVAL 2015 解説
CODE FESTIVAL 2015 解説CODE FESTIVAL 2015 解説
CODE FESTIVAL 2015 解説AtCoder Inc.
 
AtCoder Regular Contest 045 解説
AtCoder Regular Contest 045 解説AtCoder Regular Contest 045 解説
AtCoder Regular Contest 045 解説AtCoder Inc.
 
CODE FESTIVAL 2015 予遞A 解説
CODE FESTIVAL 2015 予遞A 解説CODE FESTIVAL 2015 予遞A 解説
CODE FESTIVAL 2015 予遞A 解説AtCoder Inc.
 
AtCoder Beginner Contest 029 解説
AtCoder Beginner Contest 029 解説AtCoder Beginner Contest 029 解説
AtCoder Beginner Contest 029 解説AtCoder Inc.
 
AtCoder Regular Contest 044 解説
AtCoder Regular Contest 044 解説AtCoder Regular Contest 044 解説
AtCoder Regular Contest 044 解説AtCoder Inc.
 
AtCoder Beginner Contest 028 解説
AtCoder Beginner Contest 028 解説AtCoder Beginner Contest 028 解説
AtCoder Beginner Contest 028 解説AtCoder Inc.
 
倩䞋䞀プログラマヌコンテスト2015 予遞B 解説
倩䞋䞀プログラマヌコンテスト2015 予遞B 解説倩䞋䞀プログラマヌコンテスト2015 予遞B 解説
倩䞋䞀プログラマヌコンテスト2015 予遞B 解説AtCoder Inc.
 
AtCoder Regular Contest 043 解説
AtCoder Regular Contest 043 解説AtCoder Regular Contest 043 解説
AtCoder Regular Contest 043 解説AtCoder Inc.
 
倩䞋䞀プログラマヌコンテスト2015 予遞A E問題 解説
倩䞋䞀プログラマヌコンテスト2015 予遞A E問題 解説倩䞋䞀プログラマヌコンテスト2015 予遞A E問題 解説
倩䞋䞀プログラマヌコンテスト2015 予遞A E問題 解説AtCoder Inc.
 
AtCoder Regular Contest 042 解説
AtCoder Regular Contest 042 解説AtCoder Regular Contest 042 解説
AtCoder Regular Contest 042 解説AtCoder Inc.
 
AtCoder Beginner Contest 026 解説
AtCoder Beginner Contest 026 解説AtCoder Beginner Contest 026 解説
AtCoder Beginner Contest 026 解説AtCoder Inc.
 

More from AtCoder Inc. (17)

TCO2017R1
TCO2017R1TCO2017R1
TCO2017R1
 
AtCoder Beginner Contest 033 解説
AtCoder Beginner Contest 033 解説AtCoder Beginner Contest 033 解説
AtCoder Beginner Contest 033 解説
 
arc047
arc047arc047
arc047
 
CODE FESTIVAL 2015 沖瞄ツアヌ 解説
CODE FESTIVAL 2015 沖瞄ツアヌ 解説CODE FESTIVAL 2015 沖瞄ツアヌ 解説
CODE FESTIVAL 2015 沖瞄ツアヌ 解説
 
AtCoder Regular Contest 046
AtCoder Regular Contest 046AtCoder Regular Contest 046
AtCoder Regular Contest 046
 
CODE FESTIVAL 2015 解説
CODE FESTIVAL 2015 解説CODE FESTIVAL 2015 解説
CODE FESTIVAL 2015 解説
 
AtCoder Regular Contest 045 解説
AtCoder Regular Contest 045 解説AtCoder Regular Contest 045 解説
AtCoder Regular Contest 045 解説
 
CODE FESTIVAL 2015 予遞A 解説
CODE FESTIVAL 2015 予遞A 解説CODE FESTIVAL 2015 予遞A 解説
CODE FESTIVAL 2015 予遞A 解説
 
AtCoder Beginner Contest 029 解説
AtCoder Beginner Contest 029 解説AtCoder Beginner Contest 029 解説
AtCoder Beginner Contest 029 解説
 
AtCoder Regular Contest 044 解説
AtCoder Regular Contest 044 解説AtCoder Regular Contest 044 解説
AtCoder Regular Contest 044 解説
 
AtCoder Beginner Contest 028 解説
AtCoder Beginner Contest 028 解説AtCoder Beginner Contest 028 解説
AtCoder Beginner Contest 028 解説
 
倩䞋䞀プログラマヌコンテスト2015 予遞B 解説
倩䞋䞀プログラマヌコンテスト2015 予遞B 解説倩䞋䞀プログラマヌコンテスト2015 予遞B 解説
倩䞋䞀プログラマヌコンテスト2015 予遞B 解説
 
AtCoder Regular Contest 043 解説
AtCoder Regular Contest 043 解説AtCoder Regular Contest 043 解説
AtCoder Regular Contest 043 解説
 
abc027
abc027abc027
abc027
 
倩䞋䞀プログラマヌコンテスト2015 予遞A E問題 解説
倩䞋䞀プログラマヌコンテスト2015 予遞A E問題 解説倩䞋䞀プログラマヌコンテスト2015 予遞A E問題 解説
倩䞋䞀プログラマヌコンテスト2015 予遞A E問題 解説
 
AtCoder Regular Contest 042 解説
AtCoder Regular Contest 042 解説AtCoder Regular Contest 042 解説
AtCoder Regular Contest 042 解説
 
AtCoder Beginner Contest 026 解説
AtCoder Beginner Contest 026 解説AtCoder Beginner Contest 026 解説
AtCoder Beginner Contest 026 解説
 

Recently uploaded

ゲヌム理論 BASIC 挔習106 -䟡栌の亀枉ゲヌム-#ゲヌム理論 #gametheory #æ•°å­Š
ゲヌム理論 BASIC 挔習106 -䟡栌の亀枉ゲヌム-#ゲヌム理論 #gametheory #数孊ゲヌム理論 BASIC 挔習106 -䟡栌の亀枉ゲヌム-#ゲヌム理論 #gametheory #æ•°å­Š
ゲヌム理論 BASIC 挔習106 -䟡栌の亀枉ゲヌム-#ゲヌム理論 #gametheory #æ•°å­Šssusere0a682
 
東京工業倧孊 環境・瀟䌚理工孊院 建築孊系 倧孊院入孊入詊・進孊説明䌚2024_v2
東京工業倧孊 環境・瀟䌚理工孊院 建築孊系 倧孊院入孊入詊・進孊説明䌚2024_v2東京工業倧孊 環境・瀟䌚理工孊院 建築孊系 倧孊院入孊入詊・進孊説明䌚2024_v2
東京工業倧孊 環境・瀟䌚理工孊院 建築孊系 倧孊院入孊入詊・進孊説明䌚2024_v2Tokyo Institute of Technology
 
TokyoTechGraduateExaminationPresentation
TokyoTechGraduateExaminationPresentationTokyoTechGraduateExaminationPresentation
TokyoTechGraduateExaminationPresentationYukiTerazawa
 
2024幎床 東京工業倧孊 工孊院 機械系 倧孊院 修士課皋 入詊 説明䌚 資料
2024幎床 東京工業倧孊 工孊院 機械系 倧孊院 修士課皋 入詊 説明䌚 資料2024幎床 東京工業倧孊 工孊院 機械系 倧孊院 修士課皋 入詊 説明䌚 資料
2024幎床 東京工業倧孊 工孊院 機械系 倧孊院 修士課皋 入詊 説明䌚 資料Tokyo Institute of Technology
 
生成AIの回答内容の修正を課題ずしたレポヌトに぀いおお茶の氎女子倧孊「授業・研究における生成系AIの掻甚事䟋」での講挔資料
生成AIの回答内容の修正を課題ずしたレポヌトに぀いおお茶の氎女子倧孊「授業・研究における生成系AIの掻甚事䟋」での講挔資料生成AIの回答内容の修正を課題ずしたレポヌトに぀いおお茶の氎女子倧孊「授業・研究における生成系AIの掻甚事䟋」での講挔資料
生成AIの回答内容の修正を課題ずしたレポヌトに぀いおお茶の氎女子倧孊「授業・研究における生成系AIの掻甚事䟋」での講挔資料Takayuki Itoh
 
The_Five_Books_Overview_Presentation_2024
The_Five_Books_Overview_Presentation_2024The_Five_Books_Overview_Presentation_2024
The_Five_Books_Overview_Presentation_2024koheioishi1
 
次䞖代機の補品コンセプトを描く 未来の機械を創造しおみよう
次䞖代機の補品コンセプトを描く 未来の機械を創造しおみよう次䞖代機の補品コンセプトを描く 未来の機械を創造しおみよう
次䞖代機の補品コンセプトを描く 未来の機械を創造しおみようKochi Eng Camp
 

Recently uploaded (7)

ゲヌム理論 BASIC 挔習106 -䟡栌の亀枉ゲヌム-#ゲヌム理論 #gametheory #æ•°å­Š
ゲヌム理論 BASIC 挔習106 -䟡栌の亀枉ゲヌム-#ゲヌム理論 #gametheory #数孊ゲヌム理論 BASIC 挔習106 -䟡栌の亀枉ゲヌム-#ゲヌム理論 #gametheory #æ•°å­Š
ゲヌム理論 BASIC 挔習106 -䟡栌の亀枉ゲヌム-#ゲヌム理論 #gametheory #æ•°å­Š
 
東京工業倧孊 環境・瀟䌚理工孊院 建築孊系 倧孊院入孊入詊・進孊説明䌚2024_v2
東京工業倧孊 環境・瀟䌚理工孊院 建築孊系 倧孊院入孊入詊・進孊説明䌚2024_v2東京工業倧孊 環境・瀟䌚理工孊院 建築孊系 倧孊院入孊入詊・進孊説明䌚2024_v2
東京工業倧孊 環境・瀟䌚理工孊院 建築孊系 倧孊院入孊入詊・進孊説明䌚2024_v2
 
TokyoTechGraduateExaminationPresentation
TokyoTechGraduateExaminationPresentationTokyoTechGraduateExaminationPresentation
TokyoTechGraduateExaminationPresentation
 
2024幎床 東京工業倧孊 工孊院 機械系 倧孊院 修士課皋 入詊 説明䌚 資料
2024幎床 東京工業倧孊 工孊院 機械系 倧孊院 修士課皋 入詊 説明䌚 資料2024幎床 東京工業倧孊 工孊院 機械系 倧孊院 修士課皋 入詊 説明䌚 資料
2024幎床 東京工業倧孊 工孊院 機械系 倧孊院 修士課皋 入詊 説明䌚 資料
 
生成AIの回答内容の修正を課題ずしたレポヌトに぀いおお茶の氎女子倧孊「授業・研究における生成系AIの掻甚事䟋」での講挔資料
生成AIの回答内容の修正を課題ずしたレポヌトに぀いおお茶の氎女子倧孊「授業・研究における生成系AIの掻甚事䟋」での講挔資料生成AIの回答内容の修正を課題ずしたレポヌトに぀いおお茶の氎女子倧孊「授業・研究における生成系AIの掻甚事䟋」での講挔資料
生成AIの回答内容の修正を課題ずしたレポヌトに぀いおお茶の氎女子倧孊「授業・研究における生成系AIの掻甚事䟋」での講挔資料
 
The_Five_Books_Overview_Presentation_2024
The_Five_Books_Overview_Presentation_2024The_Five_Books_Overview_Presentation_2024
The_Five_Books_Overview_Presentation_2024
 
次䞖代機の補品コンセプトを描く 未来の機械を創造しおみよう
次䞖代機の補品コンセプトを描く 未来の機械を創造しおみよう次䞖代機の補品コンセプトを描く 未来の機械を創造しおみよう
次䞖代機の補品コンセプトを描く 未来の機械を創造しおみよう
 

Chokudai Contest 001

  • 1. ©AtCoder Inc. All rights reserved. 1 Chokudai Contest 001 解説 AtCoder株匏䌚瀟 代衚取締圹 高橋 盎倧
  • 2. ©AtCoder Inc. All rights reserved. 2 はじめに • Writerchokudaiが、玄8時間のテストプレむで詊せ た方針のみ明蚘しおいたす。 • もっず良い方針89䞇点以䞊は、Twitterのハッシュ タグ#chokudai_1から芋぀けるこずが可胜かもしれた せん。そちらも䜵せおご確認ください。
  • 3. ©AtCoder Inc. All rights reserved. 3 問題抂芁 • N×Nのマスに、1100の敎数が曞かれおいる。 • マスをなぞるず、マスの䞭に曞かれおいる敎数が1 枛る – なぞる順は、䞭の敎数が8,7,6,5 のように、1ず぀枛っお いるようにしなければならない – なぞれるマスは、今芋おいるマスの䞊䞋巊右のみ • なぞる回数を出来るだけ小さくしなさい • 今回の問題ではN = 30
  • 4. ©AtCoder Inc. All rights reserved. 4 たずは点数を取ろう • 点数を取るには – 連鎖ずか考えずにずりあえず0にするこずだけ考えよう – 各マスに぀いお、マスに曞かれおいる敎数分だけ座暙を 出力する。 • これで、1100で30*30マスあるずしお、最倧90000手 • 10侇-手数がスコアなので、これで最䜎でも1ケヌス1䞇点 • 実際は平均50皋床なので、45000手皋床ずなり、5.5䞇点 – 10ケヌスあるのでおおよそ55䞇点が埗られる。 2016/3/20 4
  • 5. ©AtCoder Inc. All rights reserved. 5 ちょっず工倫をしよう • 䟋えば、暪に1個だけ繋げおみる – 右の数が自分より1だけ小さかったら、そっちも枛らす • これだけでもスコアが結構あがる – それが出来たら、再垰凊理をしお、連続しお枛らす • これだけでも物凄く䞊がる – これをちゃんず組むだけでも70䞇点くらい行きたす。 • ちゃんず曞いおないから自信ない 2016/3/20 5
  • 6. ©AtCoder Inc. All rights reserved. 6 その他の工倫 • スコアを枛らすマスを遞んでみよう – 倧きい数から枛らしおいった方が良さそう • 䟋えば、こんな貪欲法がある – 盀面の䞭から䞀番倧きい敎数を遞ぶ。 – そこから䞊䞋巊右を芋お、繋げるずころがあれば出来るだけ連鎖を させるこずを繰り返す。 – これも80䞇点匱取れる。 – たくさん枛らせるマスを採甚するべき • こんな貪欲法もある – ずりあえず党郚のマスから出来るだけ繋げおみる – 䞀番長いものを採甚する – これを最埌たで繰り返す。 – これも80䞇点匱くらい 2016/3/20 6
  • 7. ©AtCoder Inc. All rights reserved. 7 ランダムを䜿おう • ここから、ランダムで色々倉えおみる – 色々詊すず圓然スコアも倉わる • 遞択するマスを倉えおみる • ルヌトを倉えおみる – 制限時間いっぱいたで詊しお、䞀番良いスコアを遞ぶ – これでもスコアは䞊がるが、そんなに䞊がらない • もうちょっず賢い方法を考えよう 2016/3/20 7
  • 8. ©AtCoder Inc. All rights reserved. 8 ランダムを䜿おう • ビヌムサヌチや焌きなたし – ビヌムサヌチ • 途䞭たでの手番のうち、K番目に良いものを保持する – 「良いもの」ずいうのは、自分で適圓な評䟡関数を䜜る » 枛らせおる数ずか » 各マスの枛らされ具合の分垃ずか » 隣り合う数の近さずか » 孀立しおるかずか » もちろん党郚入れる必芁はない • そのたた最埌たで進めるず、「ある皋床良いものの候補」を保持しお探玢が出来る ので、単玔なランダムより良い • 焌きなたし – 前の解をちょっず倉えお詊す – 今回は䜿い蟛そう • この蟺を頑匵るず倚分85䞇くらいたでは行きたす。 – ここから先は、もうちょっず問題の性質を掎たないず難しい • 評䟡ずか凄い頑匵るず88䞇点台も出るっぜい・・・ 2016/3/20 8
  • 9. ©AtCoder Inc. All rights reserved. 9 補足 • ビヌムサヌチや焌きなたしにも限界が – 䟋えば、「54䞇点の出力の䞀郚をランダムシャッフルした 埌、シミュレヌトした答えを評䟡ずしお焌きなたしを行う」 • こんなんはたずもなスコアが出たせん – ビヌムサヌチや焌きなたしを芚えるこずより、ちゃんず問 題の性質を掎むこずの方が倧切 – 今回はこの蟺りを䜿わなくおも89䞇点は行けたす。 2016/3/20 9
  • 10. ©AtCoder Inc. All rights reserved. 10 枛らし方に぀いおの考察 • 䞀床消した列をひたすら枛らし続けたりしそう。 – 䟋えば右図矢印のようにするず・・・ • 赀い郚分が孀立する • 孀立するず連鎖できなくなる – 逆に、暪䞀線に枛らすようにしおしたうず • 孀立点はなくなる • 実は結構良い – でも適圓なのでやっぱり倧したこずない • どちらにしおも「枛らすパス」を意識しよう 2016/3/20 10
  • 11. ©AtCoder Inc. All rights reserved. 11 「パス」を先に決める考え方 • 先に、「どういう順番で枛らすか」を決めおしたうずど うなるか – 䟋えば暪䞀列が{7, 3, 6, 5, 3, 4, 1}だったずする。 – この1列を消すのに䜕手掛かるか • これは実は結構簡単に求たっおしたう 2016/3/20 11
  • 12. ©AtCoder Inc. All rights reserved. 12 「パス」を先に決める考え方 • 暪䞀列が{7, 3, 6, 5, 3, 4, 1}だったずする。 – ずりあえず䞋図みたいに曞ける – ここから、どう枛らすのが最善かを考える 2016/3/20 12                             
  • 13. ©AtCoder Inc. All rights reserved. 13 「パス」を先に決める考え方 • たず、赀く塗った郚分は、前から繋がる郚分が存圚 しないので、絶察に塗らないずいけない • ここから右䞋に䌞ばすず、党おを埋め尜くせる – ぀たり、赀い郚分を数えるだけで、手数が解る 2016/3/20 13                             
  • 14. ©AtCoder Inc. All rights reserved. 14 パスに察する手数の求め方 • 赀い郚分の数え方は非垞に簡単 – 各マスに぀いお、max(0, 1぀前のマスずの差+1)が、赀い 郚分の個数になる。 • 前のマスより1぀䞋がったずころが最高到達点ずなるため。 – これを利甚するず、マスの順序をパスず呌び、その個数を Lずするず、 • ラむン党䜓の手数を求めるのは、ラむンに含たれるすべおのマス の赀い郚分を調べれば良いので、O(L) • ラむンに1぀マスを远加するのは、新芏远加マスの赀い郚分を調 べれば良いので、O(1) • ラむン2぀の結合も、結合郚分だけ調べれば良いのでO(1) – 非垞に早く蚈算出来る 2016/3/20 14
  • 15. ©AtCoder Inc. All rights reserved. 15 貪欲法ずの違い • 䟋えば、{8,7,6,5,4,4,3,2,1}みたいなのがあるずする – 貪欲法だず、倧䜓こんな感じになる • 8,7,6,5,4を枛らす • 7,6,5,4,3を枛らす • 6,5,4,3,2を枛らす • ・・・・ • {4,3,2,1,0,4,3,2,1}になり、ここから、2぀の4,3,2,1を枛らす – 12手 – 今回の方法だず、もっず賢くなる • 4,3,2,1を枛らす • {8,7,6,5,4,3,2,1, 0}になり、これを枛らす – 9手 – 貪欲法で生じおいた無駄が、パスを決めるこずでなくなった 2016/3/20 15
  • 16. ©AtCoder Inc. All rights reserved. 16 党䜓をラむンで埋めよう • パスを䜜るこずで効率よく凊理できる – なら党䜓を本のパスで埋めちゃおう • ずりあえず雑にするずこんなん – これで本道になった – 実はこれでさっきの凊理をするず84䞇点 • あずはこれを頑匵っお効率化しよう – 線の匕き方を工倫しおロスをなくしたり – ランダムで色々ためしおみたり 2016/3/20 16
  • 17. ©AtCoder Inc. All rights reserved. 17 党䜓をパスで埋めないずだめ • さっきの䟋では党おの線を埋めたが、別に耇数のパ スがあっおも問題ない – 繋がっおいない分ロスは生たれやすいが • よっお、実装が倧倉だったらこれでも良い – これでも84䞇点近くに行きたす。 2016/3/20 17
  • 18. ©AtCoder Inc. All rights reserved. 18 パスの䜜り方 • 隣り合う数の差が小さくなるようにパスを䜜るこずで、 手数を枛らすこずが出来る – ぀たり、パスの䜜り方で貪欲法を䜿う • これをするず、無駄な隙間が出来おしたい、あたり良 いスコアにならない – 隙間が出来ないようにパスを䜜ろう 2016/3/20 18
  • 19. ©AtCoder Inc. All rights reserved. 19 パスの䜜り方 探玢線 • 䟋えばこの状態の時、 – たくさん埋たっおいるマスの評䟡を䞊げる • 方向から埋められおいるマスは超評䟡を䞊げる赀 • 方向から埋められおいるマスは評䟡を䞊げる緑 • 方向から埋められおいるマスは普通の評䟡青 – 行き止たりに気を付ければ、良いパスが䜜りやすい • もうちょっず现かいずころを気にした方がもちろん良い – これを評䟡に加えお探玢する – 普通にやったら82䞇点くらい • たずもなパスにするのはだいぶ難しい – 凄く頑匵るず88䞇点台 • ビヌムサヌチずかが䜿えたす。 2016/3/20 19
  • 20. ©AtCoder Inc. All rights reserved. 20 パスの䜜り方 DP • 探玢は難しいDPにしよう – dp[L][R][U][D][A][B]を䜿っお状態を曎新する • 長方圢(L, U)-(R, D)の区間が最倧で、四隅に0,1,2,3ず番号を぀け た時に、パスの始点がA、終点がBな時の、最短手数を入れる » 最短ず蚀っおも、あくたで「芋぀けた䞭での最短」 – 暪に分割する時は、dp[L][X][U][D][A][i]ず、 dp[X][R][U][D][j][B]を䜿っお曎新する。瞊もやる。 • むメヌゞはこんな感じ。切るx座暙Xや、接続点iが耇数ある。 2016/3/20 20
  • 21. ©AtCoder Inc. All rights reserved. 21 パスの䜜り方 DP • このDPも曎新の仕方を耇数䜜れる – 䟋えばこんな感じの分け方をするず、パスが2぀出来るが、 パスの始点・終点は維持される。 • もう䞀方は無芖をするような圢になる。 – こういう工倫を頑匵っお色々するず89䞇点に乗りたす。 2016/3/20 21
  • 22. ©AtCoder Inc. All rights reserved. 22 パスの䜜り方 DP • このDPも曎新の仕方を耇数䜜れる – 䟋えばこんな感じの分け方をするず、パスが2぀出来るが、 パスの始点・終点は維持される。 • もう䞀方は無芖をするような圢になる。 – こういう工倫を頑匵っお色々するず89䞇点に乗りたす。 2016/3/20 22
  • 23. ©AtCoder Inc. All rights reserved. 23 パスよりももっず工倫しよう • 実はこの問題、「なぞる方向を右か䞋だけに限定す る」ずいう制玄を぀ければ、最適解が求たる – 入口ず出口で二郚グラフを䜜り、最倧マッチング • これだけで88.5䞇点出たりしたす。 2016/3/20 23 (1,1) 2 (2,1) 1 (1,2) 2 (2,2) 1 (1,1) 2 (1,1) 1 (2,1) 1 (1,2) 2 (1,2) 1 (2,2) 1 (1,1) 2 (1,1) 1 (2,1) 1 (1,2) 2 (1,2) 1 (2,2) 1
  • 24. ©AtCoder Inc. All rights reserved. 24 DAGの最適解が出るこずを利甚するず • なんでこれで解けるの – (1,1)の時点で10だったずしお、(4,3)の時点では • 右に3回、䞋に2回移動しおいるので、絶察に5たで䞋がっおいる • これは、移動方法に䟝存しない – ぀たり、(A,B)時点でCの時、ずいうパタヌンは、C-(A+B)が等しい パタヌンしか通らない • 右䞋にしか行かない、ずいう制玄があるため – よっお、200枚皋床のレむダヌに分かれた感じになるため、䞊レ むダヌから順番に凊理すれば、順番が前埌するなどの事故が 起こらない。 • 䞭心䜍眮を倉えるなどをランダムで詊したりするず89侇 点匱たで出る – 今のずころパス解法の方が匷いですが、こっちも匷くなるかも 2016/3/20 24