SlideShare ist ein Scribd-Unternehmen logo
1 von 53
Downloaden Sie, um offline zu lesen
難しい典型テクとか
Slides for IOI2015 Japan Team
注意事項
写真が入っていた空間には代わりに写真のURLを
載せたので気分を楽しんでください。
Contents
・変なDP
mongeとか
・分割統治
これらの手法の個人的イメージ
・典型テクではある
・とはいえ使いどころが非自明
・使う必要を出そうと思うと難しい問題になりがち
・なかなかこういう問題は作られない
・経験が積みにくい
これらの手法の個人的イメージ
・典型テクではある
・とはいえ使いどころが非自明
・中でやってることも単純じゃないことが多い
・なかなかこういう問題は作られない
・経験が積みにくい
練習しにくい
二分探索的ポジション
Contents
・変なDP
mongeとか
・分割統治
http://www.ioi-jp.
org/ioi/2012/9-
26/gardaland5.jpg
DP Optimization
読むべき資料(数式が苦手なので読めていない)
・http://topcoder.g.hatena.ne.jp/spaghetti_source/20120915
・http://codeforces.com/blog/entry/8219
http://www.ioi-jp.
org/ioi/2013/7-
06/sydney1.jpg
Most Typical DP Optimization
一番多いパターンはこんな感じの
dp[i][j]=max{dp[i-1][k]+都合のよい関数}
ただし、dp[i][j]を決めることになったkよりもdp[i]
[j+1]を決めることになったkが小さくはならない
→変な順でdpテーブルを埋めると計算量が落ちる
Telephone Wire (PKU 3612)
dp[i][j]=min{dp[i-1][k]+C×abs(j-k)+(h[i]-j)2
}
(j≧h[i]のみ埋める)
A[i][j]:= (dp[i][j]を決定付けるkの値)
とすると A[i][j] ≦ A[i][j+1] が容易に想像つく
あと、凸性も持っている(…≧≧≧≧≦≦≦≦…み
たいな感じ)
Telephone Wire (PKU 3612)
どういう方法で高速化できるか
・dp[i][j]を、dp[i-1][k]+C×abs(j-k)+(h[i]-j)2
を
kが小さい順に計算
・途中で一つ前より大きくなってしまったらやめ
る
・大きくなる前のkからdp[i][j+1]を計算
・以下繰り返し
514
j
k
514 114
j
k
514 114 810
j
k
514 114 810
364j
k
514 114 810
364 364j
k
514 114 810
364 364 334j
k
514 114 810
364 364 334 1919j
k
514 114 810
364 364 334 1919
893
j
k
514 114 810
364 364 334 1919
893 114514
j
k
514 114 810
364 364 334 1919
893 114514
33
j
k
514 114 810
364 364 334 1919
893 114514
33 4
j
k
514 114 810
364 364 334 1919
893 114514
33 4 1000000007
j
k
Sashimi (AOJ 2415)
・次の区間DPをO(N2
)で全部埋めたい
dp[i][j]=mini≦k<j
{dp[i][k]+dp[k][j]}+sum(i,j)
Sashimi (AOJ 2415)
数式がやってることをイメージする
dp[i][j]=mini≦k<j
{dp[i][k]+dp[k][j]}+sum(i,j)
iがi-1になったりjがj+1になったら最適にするkの値
はどう変化するか?
A[i][j]:= (dp[i][k]+dp[k][j]を最小とするkの値)
とするとA[i-1][j] ≦ A[i][j] ≦ A[i][j+1]
が成り立ちそう(???????)
Sashimi (AOJ 2415)
数式がやってることをイメージする
dp[i][j]=mini≦k<j
{dp[i][k]+dp[k][j]}+sum(i,j)
iがi-1になったりjがj+1になったら最適にするkの値
はどう変化するか?
A[i][j]:= (dp[i][k]+dp[k][j]を最小とするkの値)
とするとA[i-1][j] ≦ A[i][j] ≦ A[i][j+1]
が成り立ちそう(???????)
脳内でイメージし
よう!
詳しい条件
ちなみにA[i-1][j] ≦ A[i][j] ≦ A[i][j+1]が成り立
つ十分条件としては、
a≦b≦c≦dのとき、
・C[a][c]+C[b][d] ≦ C[a][d]+C[b][c]
・C[b][c]≦C[a][d]
が成り立つというものが有名
DPテーブルの更新の仕方
・dp[i][j]をj-iが小さい順に更新していく
・配列A[i][j]を別に用意する
・dp[i][i]=0, A[i][i]=iがスタート
0
1
2
3
i
j
初期状態
0
1
2
3
i
j
0≦k≦1を試す
0 0
1
2
3
i
j
1≦k≦2を試す
0 0
1 2
2
3
i
j
2≦k≦3を試す
0 0
1 2
2 2
3
i
j
0≦k≦2を試す
0 0 1
1 2
2 2
3
i
j
2≦k≦2を試す
0 0 1
1 2 2
2 2
3
i
j
1≦k≦2を試す
0 0 1 1
1 2 2
2 2
3
i
j
各j-iの値ごとに
O(N)かかるので
合計O(N2
)
Buffed Buffet (ICPC WF2014 B)
N種類の食べ物があり、1個あたり重さwi
で、k個目
を食べたとき満足度はvi
-(k-1)Δvi
上昇する。
食べたものの重さの合計が0~wになるときのそれ
ぞれの満足度の最大値を求めよ。
N≦250, W≦10,000
0≦vi
, Δvi
Buffed Buffet (ICPC WF2014 B)
dp[i][j]:=i種類目まで合計重さjのときの最大値
普通に計算するとO(NW2
)で遅い
今まで見たとおり疑ってかかるべき点は
A[i][j]≦A[i][j+1]が成り立つかどうか
Buffed Buffet (ICPC WF2014 B)
左のような状況になり得
ないことを示す必要があ
る
Buffed Buffet (ICPC WF2014 B)
このとき計算すると青よ
り緑がより最適になるの
で矛盾する
(スライドにしにくい)
よって
A[i][j]≦A[i][j+1]
s t u v
A[i][j]
j
今までの結果か
ら、jとA[i][j]の関
係はたとえば左
図のようになる。
A[i][j]
j
真ん中の行の最
適値を求めてか
ら左上と右下に
分けて分割統治
A[i][j]
j
真ん中の最適値
を求めてから左
上と右下に分け
て分割統治
灰色のところはも
う計算しない
計算量
分割統治で細かい断片に分かれるが、
・k回分割した後の断片たちの計算が合計でO(N)
・O(log N)回分割される
計O(N log N)で全体が更新できる
(この問題ならN回W個のものを更新するので
合計O(NW log W)になる)
Wombats (IOI 2013)
・(r0
,i)→(r1
,k), (r1
,k)→(r2
,j)の最短経路長がそれ
ぞれ分かっているので合成して(r0
,i)→(r2
,j) の最
短経路長全部をO(N2
)で求める必要がある
・下から上に逆走できないのでこのアイデアが出る
http://www.ioi-
jp.
org/ioi/2013/7
-11/zoo6.jpg
http://www.ioi-
jp.
org/ioi/2013/7-
11/zoo5.jpg
Wombats (IOI 2013)
今、上の始点を固定したr0
r1
r2
https://pbs.twimg.
com/profile_imag
es/46215226982
4139264/uvdKue
Hz.png
Wombats (IOI 2013)
□に行く最善の方法で△
を通るとき
r0
r1
r2
http://www.
ioi-jp.
org/ioi/201
3/7-
13/brisban
e7.jpg
Wombats (IOI 2013)
□を左にずらしたら△が
右に移動したほうが小さ
くなるケースはあるか?
交差しているところをもう
ちょっと真面目に考える
r0
r1
r2
Wombats (IOI 2013)
最低1箇所はクロスする
ことになる(共有部分は
点だけかもしれないけ
ど)
赤い辺に着目すると緑
の経路のほうがオレンジ
の経路よりコストが低い
Wombats (IOI 2013)
青い辺に着目するとオレ
ンジの経路のほうが緑
の経路よりコストが低い
これはおかしい
http://www.ioi-jp.
org/ioi/2013/7-
12/awarding5.jpg
Wombats (IOI 2013)
下の点を固定しても同じこと
が言える
ということで
A[i-1][j]≦A[i][j]≦A[i][j+1]
ふたたび登場
Sashimiと同様、i-jの昇順に
テーブルを埋めていく
r0
r1
r2
注意
この問題ではTelephone Wireのような簡単な更新
は不可能
なぜか?→≧≧≧≦≦≦≦≦の形になっていない
100 100
1001
0 0 0
0
00
0 0 0 0
0 0 0
□から○までの最短経路を求めるときに1→100
と悪くなったのでやめる
↓
0の経路がその後にあることを見逃す
↓
メダルが消える
練習問題
AOJ 2603 Time Table
AOJ 2488 Tree Construction
さっきの2つのURLの先にもたくさん練習問題があ
ります。
Conclusion
・DPで「最適を出すkの値が単調」みたいな場面に
出くわしたら計算量が改善できることもしばしばあ
る
・どういうパターンかはしっかり考察する必要があ
る
・あと(DPテーブルを変な順で埋めるだけあって)実
装が一筋縄ではいかないので要練習

Weitere ähnliche Inhalte

Was ist angesagt?

プログラミングコンテストでのデータ構造
プログラミングコンテストでのデータ構造プログラミングコンテストでのデータ構造
プログラミングコンテストでのデータ構造
Takuya Akiba
 

Was ist angesagt? (20)

AtCoder Beginner Contest 023 解説
AtCoder Beginner Contest 023 解説AtCoder Beginner Contest 023 解説
AtCoder Beginner Contest 023 解説
 
AtCoder Regular Contest 039 解説
AtCoder Regular Contest 039 解説AtCoder Regular Contest 039 解説
AtCoder Regular Contest 039 解説
 
図と実装で理解する『木構造入門』
図と実装で理解する『木構造入門』図と実装で理解する『木構造入門』
図と実装で理解する『木構造入門』
 
arc047
arc047arc047
arc047
 
プログラミングコンテストでのデータ構造
プログラミングコンテストでのデータ構造プログラミングコンテストでのデータ構造
プログラミングコンテストでのデータ構造
 
AtCoder Regular Contest 046
AtCoder Regular Contest 046AtCoder Regular Contest 046
AtCoder Regular Contest 046
 
AtCoder Beginner Contest 002 解説
AtCoder Beginner Contest 002 解説AtCoder Beginner Contest 002 解説
AtCoder Beginner Contest 002 解説
 
AtCoder Regular Contest 037 解説
AtCoder Regular Contest 037 解説AtCoder Regular Contest 037 解説
AtCoder Regular Contest 037 解説
 
指数時間アルゴリズム入門
指数時間アルゴリズム入門指数時間アルゴリズム入門
指数時間アルゴリズム入門
 
Union find(素集合データ構造)
Union find(素集合データ構造)Union find(素集合データ構造)
Union find(素集合データ構造)
 
色々なダイクストラ高速化
色々なダイクストラ高速化色々なダイクストラ高速化
色々なダイクストラ高速化
 
全域木いろいろ
全域木いろいろ全域木いろいろ
全域木いろいろ
 
Chokudai search
Chokudai searchChokudai search
Chokudai search
 
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に毎回参加したくなる仕組み
AtCoderに毎回参加したくなる仕組みAtCoderに毎回参加したくなる仕組み
AtCoderに毎回参加したくなる仕組み
 
Rolling Hashを殺す話
Rolling Hashを殺す話Rolling Hashを殺す話
Rolling Hashを殺す話
 
動的計画法を極める!
動的計画法を極める!動的計画法を極める!
動的計画法を極める!
 
辺彩色
辺彩色辺彩色
辺彩色
 
LCA and RMQ ~簡潔もあるよ!~
LCA and RMQ ~簡潔もあるよ!~LCA and RMQ ~簡潔もあるよ!~
LCA and RMQ ~簡潔もあるよ!~
 

Andere mochten auch

2011 02-21 第1回@freaks勉強会
2011 02-21 第1回@freaks勉強会2011 02-21 第1回@freaks勉強会
2011 02-21 第1回@freaks勉強会
YuichiroMukai
 
2年生向けICPC紹介資料
2年生向けICPC紹介資料2年生向けICPC紹介資料
2年生向けICPC紹介資料
Yuma Inoue
 

Andere mochten auch (20)

CODE FESTIVAL 2015 沖縄ツアー 解説
CODE FESTIVAL 2015 沖縄ツアー 解説CODE FESTIVAL 2015 沖縄ツアー 解説
CODE FESTIVAL 2015 沖縄ツアー 解説
 
DP特集
DP特集DP特集
DP特集
 
定番アルゴリズムを徹底理解!
定番アルゴリズムを徹底理解!定番アルゴリズムを徹底理解!
定番アルゴリズムを徹底理解!
 
ダイクストラ法
ダイクストラ法ダイクストラ法
ダイクストラ法
 
目指せグラフマスター
目指せグラフマスター目指せグラフマスター
目指せグラフマスター
 
2011 02-21 第1回@freaks勉強会
2011 02-21 第1回@freaks勉強会2011 02-21 第1回@freaks勉強会
2011 02-21 第1回@freaks勉強会
 
初めてのプロコン
初めてのプロコン初めてのプロコン
初めてのプロコン
 
RUPC2017:M問題
RUPC2017:M問題RUPC2017:M問題
RUPC2017:M問題
 
RUPC2017:K解説
RUPC2017:K解説RUPC2017:K解説
RUPC2017:K解説
 
各種問題の解説
各種問題の解説各種問題の解説
各種問題の解説
 
動的計画法
動的計画法動的計画法
動的計画法
 
ICPC国内予選F解説
ICPC国内予選F解説ICPC国内予選F解説
ICPC国内予選F解説
 
RUPC2017:F解説
RUPC2017:F解説RUPC2017:F解説
RUPC2017:F解説
 
RUPC2017:L解説
RUPC2017:L解説RUPC2017:L解説
RUPC2017:L解説
 
2年生向けICPC紹介資料
2年生向けICPC紹介資料2年生向けICPC紹介資料
2年生向けICPC紹介資料
 
グラフを扱おう:最短路問題
グラフを扱おう:最短路問題グラフを扱おう:最短路問題
グラフを扱おう:最短路問題
 
AtCoder Beginner Contest 035 解説
AtCoder Beginner Contest 035 解説AtCoder Beginner Contest 035 解説
AtCoder Beginner Contest 035 解説
 
ICPC2014 チーム紹介スライド !#$%&()*+-./:;&lt;=>?@[\]^_`{|}~
ICPC2014 チーム紹介スライド !#$%&()*+-./:;&lt;=>?@[\]^_`{|}~ICPC2014 チーム紹介スライド !#$%&()*+-./:;&lt;=>?@[\]^_`{|}~
ICPC2014 チーム紹介スライド !#$%&()*+-./:;&lt;=>?@[\]^_`{|}~
 
実践・最強最速のアルゴリズム勉強会 第三回講義資料(ワークスアプリケーションズ & AtCoder)
実践・最強最速のアルゴリズム勉強会 第三回講義資料(ワークスアプリケーションズ & AtCoder)実践・最強最速のアルゴリズム勉強会 第三回講義資料(ワークスアプリケーションズ & AtCoder)
実践・最強最速のアルゴリズム勉強会 第三回講義資料(ワークスアプリケーションズ & AtCoder)
 
高速フーリエ変換
高速フーリエ変換高速フーリエ変換
高速フーリエ変換
 

Ähnlich wie 直前合宿 講義スライド

オブジェクト倶楽部2005(プレゼン)
オブジェクト倶楽部2005(プレゼン)オブジェクト倶楽部2005(プレゼン)
オブジェクト倶楽部2005(プレゼン)
Yukio Okajima
 
アイディア発想法とかモノ作りを初める前にやること
アイディア発想法とかモノ作りを初める前にやることアイディア発想法とかモノ作りを初める前にやること
アイディア発想法とかモノ作りを初める前にやること
Yumi uniq Ishizaki
 
研修担当者に聞く、学生のうちに学ぶべきこと
研修担当者に聞く、学生のうちに学ぶべきこと研修担当者に聞く、学生のうちに学ぶべきこと
研修担当者に聞く、学生のうちに学ぶべきこと
Hiromu Shioya
 
グループディスカッションの巻
グループディスカッションの巻グループディスカッションの巻
グループディスカッションの巻
Takashi Abe
 
Dddをもっと身近に
Dddをもっと身近にDddをもっと身近に
Dddをもっと身近に
Yukei Wachi
 

Ähnlich wie 直前合宿 講義スライド (20)

30分でできる!「アウェイ」でTOCfEを広めるための「追体験アプローチ」_2014tTOCfEシンポジウム_06
30分でできる!「アウェイ」でTOCfEを広めるための「追体験アプローチ」_2014tTOCfEシンポジウム_0630分でできる!「アウェイ」でTOCfEを広めるための「追体験アプローチ」_2014tTOCfEシンポジウム_06
30分でできる!「アウェイ」でTOCfEを広めるための「追体験アプローチ」_2014tTOCfEシンポジウム_06
 
オブジェクト倶楽部2005(プレゼン)
オブジェクト倶楽部2005(プレゼン)オブジェクト倶楽部2005(プレゼン)
オブジェクト倶楽部2005(プレゼン)
 
2015/05/09 第5回G-Study発表資料-デールカーネギーセミナーにいってみたよ(`・ω・´)b
2015/05/09 第5回G-Study発表資料-デールカーネギーセミナーにいってみたよ(`・ω・´)b2015/05/09 第5回G-Study発表資料-デールカーネギーセミナーにいってみたよ(`・ω・´)b
2015/05/09 第5回G-Study発表資料-デールカーネギーセミナーにいってみたよ(`・ω・´)b
 
120131 ppt
120131 ppt120131 ppt
120131 ppt
 
アイディア発想法とかモノ作りを初める前にやること
アイディア発想法とかモノ作りを初める前にやることアイディア発想法とかモノ作りを初める前にやること
アイディア発想法とかモノ作りを初める前にやること
 
研修担当者に聞く、学生のうちに学ぶべきこと
研修担当者に聞く、学生のうちに学ぶべきこと研修担当者に聞く、学生のうちに学ぶべきこと
研修担当者に聞く、学生のうちに学ぶべきこと
 
メタ思考トレーニング
メタ思考トレーニングメタ思考トレーニング
メタ思考トレーニング
 
本学部でのアクティブラーニングの導入事例
~コンセプトは「多読と発表」「原理と概念の理解」
本学部でのアクティブラーニングの導入事例
~コンセプトは「多読と発表」「原理と概念の理解」本学部でのアクティブラーニングの導入事例
~コンセプトは「多読と発表」「原理と概念の理解」
本学部でのアクティブラーニングの導入事例
~コンセプトは「多読と発表」「原理と概念の理解」
 
グループディスカッションの巻
グループディスカッションの巻グループディスカッションの巻
グループディスカッションの巻
 
めんどくさい…から始める効率化のススメ
めんどくさい…から始める効率化のススメめんどくさい…から始める効率化のススメ
めんどくさい…から始める効率化のススメ
 
書く技術・話す技術 勉強会サポートプログラム
書く技術・話す技術 勉強会サポートプログラム書く技術・話す技術 勉強会サポートプログラム
書く技術・話す技術 勉強会サポートプログラム
 
勉強会を始めるまで #java_ja
勉強会を始めるまで #java_ja勉強会を始めるまで #java_ja
勉強会を始めるまで #java_ja
 
UMTPアジャイル開発における モデリング活用実践セミナー
UMTPアジャイル開発におけるモデリング活用実践セミナーUMTPアジャイル開発におけるモデリング活用実践セミナー
UMTPアジャイル開発における モデリング活用実践セミナー
 
Sit tokyo2021 0203_dt sonosakie_taroozaki
Sit tokyo2021 0203_dt sonosakie_taroozakiSit tokyo2021 0203_dt sonosakie_taroozaki
Sit tokyo2021 0203_dt sonosakie_taroozaki
 
Dddをもっと身近に
Dddをもっと身近にDddをもっと身近に
Dddをもっと身近に
 
スクラムのフレームワークでKAIZENを体験しよう comeback japan 2017
スクラムのフレームワークでKAIZENを体験しよう comeback japan 2017スクラムのフレームワークでKAIZENを体験しよう comeback japan 2017
スクラムのフレームワークでKAIZENを体験しよう comeback japan 2017
 
周りを巻き込みながら歩んできた関西人スクラムマスターの自分戦略(DevLove2012_yohhatu)
周りを巻き込みながら歩んできた関西人スクラムマスターの自分戦略(DevLove2012_yohhatu)周りを巻き込みながら歩んできた関西人スクラムマスターの自分戦略(DevLove2012_yohhatu)
周りを巻き込みながら歩んできた関西人スクラムマスターの自分戦略(DevLove2012_yohhatu)
 
Happy Windows Automation with Ansible
Happy Windows Automation with AnsibleHappy Windows Automation with Ansible
Happy Windows Automation with Ansible
 
DevLOVE関西2012 Drive 講演資料(iBook)
DevLOVE関西2012 Drive 講演資料(iBook)DevLOVE関西2012 Drive 講演資料(iBook)
DevLOVE関西2012 Drive 講演資料(iBook)
 
201906 1on1実践をつうじて、わかってきたこと そしてやること
201906 1on1実践をつうじて、わかってきたこと そしてやること201906 1on1実践をつうじて、わかってきたこと そしてやること
201906 1on1実践をつうじて、わかってきたこと そしてやること
 

直前合宿 講義スライド