SlideShare uma empresa Scribd logo
1 de 63
Baixar para ler offline
競技プログラミング
頻出アルゴリズム攻略
2016.01.13 Author: Moneto
(MATYLA-PG, @Moneto_Tk)
10
whoami
•@Moneto_Tk
•JOI出場経験あり
•只の凡人老兵
whoami
•
•
•
•
•
whoami
•
•
•
•
whoami
•
•
•
•
•
競技プログラミングで
必要な知識
アルゴリズムの知識
著名な問題やその定石
「変な」テクニック
「変な」テクニック
http://ichyo.jp/posts/2014-12-15-advent-calender/
•
•
•
アルゴリズムの知識
著名な問題やその定石
競技プログラミングで
必要なアルゴリズムの知識
•
•
•
•
競技プログラミングで
必要なアルゴリズムの知識
•
•
•
今日の内容は
その中でも基本的なもの
DP
Dynamic Programming
動的計画法
BFS
Breadth First Search
幅優先探索
DFS
Depth First Search
深さ優先探索
取り扱う基準
•
•
•
DP
Dynamic Programming
動的計画法
DP
•
•
•
•
DP
•
•
•
•
DP
•
•
•
•
•
DP
•
•
•
•
•
DP
•
•
•
•
•
Tips
intの値を一瞬でも超えることが
分かった時点で
絶対にlong longを使おう
実力者でも気をつけるべきミス
DP
•
•
•
•
•
Fib(n)
•
public static Int64 fib_rec(int n)
{
if (n == 0) return 0;
else if (n == 1) return 1;
return fib_rec(n - 1) + fib_rec(n - 2);
}
Fib(n)
•
public static Int64 fib_rec_m(int n)
{
if (n == 0) return 0;
else if (n == 1) return 1;
else if (table[n] != 0) return table[n];
else return table[n]
= fib_rec_m(n - 1) + fib_rec_m(n - 2);
}
Fib(n)
•
public static Int64 fib_dp(int n)
{
int[] dp = new int[n];
dp[0] = 1;
dp[1] = 1;
for (int i = 0; i < n - 2; i++)
{
dp[i + 2] = dp[i] + dp[i + 1];
}
return dp[n - 1];
}
•
•
•
Fib(n)
0 1
•
•
Fib(n)
0 1 1
•
•
Fib(n)
0 1 1 2
•
•
•
Fib(n)
0 1 1 2 3
•
•
•
Fib(n)
0 1 1 2 3 5 8 13 21 34
•
•
•
BFS
Breadth First Search
幅優先探索
BFS
•
•
•
•
BFS 1
BFS 1
子ノードが見つかったら
キューに格納
BFS 1
2 3
子ノードが見つかったら
キューに格納
BFS 1
2 3
4 5
6 7
Best-First
•
•
•
•
Best-First
•
•
•
•
•
RTS
http://neetpia.sakura.ne.jp/works/GensouSenryakutan/1.jpg
RTS
http://neetpia.sakura.ne.jp/works/GensouSenryakutan/1.jpg
行き先を指定すると
最適な移動経路を計算し
その通りに移動してくれる
考慮するべき条件
高低差(崖は迂回する)
建造物、森林、河川など
DFS
Depth First Search
深さ優先探索
DFS
•
•
•
•
DFS 1
DFS 1
2
分岐が見つかったら
スタックに格納
DFS 1
2
3
分岐が見つかったら
スタックに格納
DFS 1
2
3
4 分岐が見つかったら
スタックに格納
DFS 1
2
3
4 5 スタックの処理順番
「先入れ後出し」
DFS 1
2 7
3 6
4 5
根底の考え方は
どれも簡単
手頃な練習
•
•
•
•
•
Tips
•
•
•
手頃な練習
•
•
•
•
•
手頃な練習
•
•
•
•
•
Tips
•
•
•
ICPCの国内強豪は
JOI出身者が多い
「JOI出身者」のレベルが
いかに高いか
ちょっと
•
•
もうちょっと
•
•
•
更にもうちょっと
•
•
•
•
というわけで
•
•
•
•
お疲れ様でした

Mais conteúdo relacionado

Mais procurados

競技プログラミングにおけるコードの書き方とその利便性
競技プログラミングにおけるコードの書き方とその利便性競技プログラミングにおけるコードの書き方とその利便性
競技プログラミングにおけるコードの書き方とその利便性Hibiki Yamashiro
 
最適化超入門
最適化超入門最適化超入門
最適化超入門Takami Sato
 
機械学習モデルの判断根拠の説明
機械学習モデルの判断根拠の説明機械学習モデルの判断根拠の説明
機械学習モデルの判断根拠の説明Satoshi Hara
 
指数時間アルゴリズム入門
指数時間アルゴリズム入門指数時間アルゴリズム入門
指数時間アルゴリズム入門Yoichi Iwata
 
機械学習のためのベイズ最適化入門
機械学習のためのベイズ最適化入門機械学習のためのベイズ最適化入門
機械学習のためのベイズ最適化入門hoxo_m
 
Union find(素集合データ構造)
Union find(素集合データ構造)Union find(素集合データ構造)
Union find(素集合データ構造)AtCoder Inc.
 
強化学習の基礎と深層強化学習(東京大学 松尾研究室 深層強化学習サマースクール講義資料)
強化学習の基礎と深層強化学習(東京大学 松尾研究室 深層強化学習サマースクール講義資料)強化学習の基礎と深層強化学習(東京大学 松尾研究室 深層強化学習サマースクール講義資料)
強化学習の基礎と深層強化学習(東京大学 松尾研究室 深層強化学習サマースクール講義資料)Shota Imai
 
グラフニューラルネットワーク入門
グラフニューラルネットワーク入門グラフニューラルネットワーク入門
グラフニューラルネットワーク入門ryosuke-kojima
 
先端技術とメディア表現1 #FTMA15
先端技術とメディア表現1 #FTMA15先端技術とメディア表現1 #FTMA15
先端技術とメディア表現1 #FTMA15Yoichi Ochiai
 
暗号技術の実装と数学
暗号技術の実装と数学暗号技術の実装と数学
暗号技術の実装と数学MITSUNARI Shigeo
 
差分プライバシーとは何か? (定義 & 解釈編)
差分プライバシーとは何か? (定義 & 解釈編)差分プライバシーとは何か? (定義 & 解釈編)
差分プライバシーとは何か? (定義 & 解釈編)Kentaro Minami
 
色々なダイクストラ高速化
色々なダイクストラ高速化色々なダイクストラ高速化
色々なダイクストラ高速化yosupo
 
最適輸送入門
最適輸送入門最適輸送入門
最適輸送入門joisino
 
平面グラフと交通ネットワークのアルゴリズム
平面グラフと交通ネットワークのアルゴリズム平面グラフと交通ネットワークのアルゴリズム
平面グラフと交通ネットワークのアルゴリズムTakuya Akiba
 
プログラミングコンテストでのデータ構造
プログラミングコンテストでのデータ構造プログラミングコンテストでのデータ構造
プログラミングコンテストでのデータ構造Takuya Akiba
 
エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織Takafumi ONAKA
 
ニューラルチューリングマシン入門
ニューラルチューリングマシン入門ニューラルチューリングマシン入門
ニューラルチューリングマシン入門naoto moriyama
 

Mais procurados (20)

競技プログラミングにおけるコードの書き方とその利便性
競技プログラミングにおけるコードの書き方とその利便性競技プログラミングにおけるコードの書き方とその利便性
競技プログラミングにおけるコードの書き方とその利便性
 
最適化超入門
最適化超入門最適化超入門
最適化超入門
 
機械学習モデルの判断根拠の説明
機械学習モデルの判断根拠の説明機械学習モデルの判断根拠の説明
機械学習モデルの判断根拠の説明
 
指数時間アルゴリズム入門
指数時間アルゴリズム入門指数時間アルゴリズム入門
指数時間アルゴリズム入門
 
明日使えないすごいビット演算
明日使えないすごいビット演算明日使えないすごいビット演算
明日使えないすごいビット演算
 
ゼロから始める転移学習
ゼロから始める転移学習ゼロから始める転移学習
ゼロから始める転移学習
 
機械学習のためのベイズ最適化入門
機械学習のためのベイズ最適化入門機械学習のためのベイズ最適化入門
機械学習のためのベイズ最適化入門
 
Union find(素集合データ構造)
Union find(素集合データ構造)Union find(素集合データ構造)
Union find(素集合データ構造)
 
強化学習の基礎と深層強化学習(東京大学 松尾研究室 深層強化学習サマースクール講義資料)
強化学習の基礎と深層強化学習(東京大学 松尾研究室 深層強化学習サマースクール講義資料)強化学習の基礎と深層強化学習(東京大学 松尾研究室 深層強化学習サマースクール講義資料)
強化学習の基礎と深層強化学習(東京大学 松尾研究室 深層強化学習サマースクール講義資料)
 
グラフと木
グラフと木グラフと木
グラフと木
 
グラフニューラルネットワーク入門
グラフニューラルネットワーク入門グラフニューラルネットワーク入門
グラフニューラルネットワーク入門
 
先端技術とメディア表現1 #FTMA15
先端技術とメディア表現1 #FTMA15先端技術とメディア表現1 #FTMA15
先端技術とメディア表現1 #FTMA15
 
暗号技術の実装と数学
暗号技術の実装と数学暗号技術の実装と数学
暗号技術の実装と数学
 
差分プライバシーとは何か? (定義 & 解釈編)
差分プライバシーとは何か? (定義 & 解釈編)差分プライバシーとは何か? (定義 & 解釈編)
差分プライバシーとは何か? (定義 & 解釈編)
 
色々なダイクストラ高速化
色々なダイクストラ高速化色々なダイクストラ高速化
色々なダイクストラ高速化
 
最適輸送入門
最適輸送入門最適輸送入門
最適輸送入門
 
平面グラフと交通ネットワークのアルゴリズム
平面グラフと交通ネットワークのアルゴリズム平面グラフと交通ネットワークのアルゴリズム
平面グラフと交通ネットワークのアルゴリズム
 
プログラミングコンテストでのデータ構造
プログラミングコンテストでのデータ構造プログラミングコンテストでのデータ構造
プログラミングコンテストでのデータ構造
 
エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織
 
ニューラルチューリングマシン入門
ニューラルチューリングマシン入門ニューラルチューリングマシン入門
ニューラルチューリングマシン入門
 

競技プログラミング頻出アルゴリズム攻略