SlideShare una empresa de Scribd logo
1 de 63
Descargar para leer sin conexión
競技プログラミング
頻出アルゴリズム攻略
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出身者」のレベルが
いかに高いか
ちょっと
•
•
もうちょっと
•
•
•
更にもうちょっと
•
•
•
•
というわけで
•
•
•
•
お疲れ様でした

Más contenido relacionado

La actualidad más candente

プログラミングコンテストでのデータ構造
プログラミングコンテストでのデータ構造プログラミングコンテストでのデータ構造
プログラミングコンテストでのデータ構造
Takuya Akiba
 
数理最適化とPython
数理最適化とPython数理最適化とPython
数理最適化とPython
Yosuke Onoue
 
プログラミングコンテストでの乱択アルゴリズム
プログラミングコンテストでの乱択アルゴリズムプログラミングコンテストでの乱択アルゴリズム
プログラミングコンテストでの乱択アルゴリズム
Takuya Akiba
 
不均衡データのクラス分類
不均衡データのクラス分類不均衡データのクラス分類
不均衡データのクラス分類
Shintaro Fukushima
 

La actualidad más candente (20)

グラフニューラルネットワーク入門
グラフニューラルネットワーク入門グラフニューラルネットワーク入門
グラフニューラルネットワーク入門
 
プログラミングコンテストでのデータ構造
プログラミングコンテストでのデータ構造プログラミングコンテストでのデータ構造
プログラミングコンテストでのデータ構造
 
機械学習モデルのハイパパラメータ最適化
機械学習モデルのハイパパラメータ最適化機械学習モデルのハイパパラメータ最適化
機械学習モデルのハイパパラメータ最適化
 
第8章 ガウス過程回帰による異常検知
第8章 ガウス過程回帰による異常検知第8章 ガウス過程回帰による異常検知
第8章 ガウス過程回帰による異常検知
 
最適化超入門
最適化超入門最適化超入門
最適化超入門
 
Rolling Hashを殺す話
Rolling Hashを殺す話Rolling Hashを殺す話
Rolling Hashを殺す話
 
最適輸送入門
最適輸送入門最適輸送入門
最適輸送入門
 
指数時間アルゴリズム入門
指数時間アルゴリズム入門指数時間アルゴリズム入門
指数時間アルゴリズム入門
 
SAT/SMTソルバの仕組み
SAT/SMTソルバの仕組みSAT/SMTソルバの仕組み
SAT/SMTソルバの仕組み
 
Union find(素集合データ構造)
Union find(素集合データ構造)Union find(素集合データ構造)
Union find(素集合データ構造)
 
数理最適化とPython
数理最適化とPython数理最適化とPython
数理最適化とPython
 
強化学習アルゴリズムPPOの解説と実験
強化学習アルゴリズムPPOの解説と実験強化学習アルゴリズムPPOの解説と実験
強化学習アルゴリズムPPOの解説と実験
 
遺伝的アルゴリズム (Genetic Algorithm)を始めよう!
遺伝的アルゴリズム(Genetic Algorithm)を始めよう!遺伝的アルゴリズム(Genetic Algorithm)を始めよう!
遺伝的アルゴリズム (Genetic Algorithm)を始めよう!
 
Binary indexed tree
Binary indexed treeBinary indexed tree
Binary indexed tree
 
プログラミングコンテストでの乱択アルゴリズム
プログラミングコンテストでの乱択アルゴリズムプログラミングコンテストでの乱択アルゴリズム
プログラミングコンテストでの乱択アルゴリズム
 
プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~
プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~
プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~
 
[DL輪読会]Revisiting Deep Learning Models for Tabular Data (NeurIPS 2021) 表形式デー...
[DL輪読会]Revisiting Deep Learning Models for Tabular Data  (NeurIPS 2021) 表形式デー...[DL輪読会]Revisiting Deep Learning Models for Tabular Data  (NeurIPS 2021) 表形式デー...
[DL輪読会]Revisiting Deep Learning Models for Tabular Data (NeurIPS 2021) 表形式デー...
 
ウェーブレット木の世界
ウェーブレット木の世界ウェーブレット木の世界
ウェーブレット木の世界
 
純粋関数型アルゴリズム入門
純粋関数型アルゴリズム入門純粋関数型アルゴリズム入門
純粋関数型アルゴリズム入門
 
不均衡データのクラス分類
不均衡データのクラス分類不均衡データのクラス分類
不均衡データのクラス分類
 

Destacado

Destacado (7)

20160620 競技プログラミングのすゝめ
20160620 競技プログラミングのすゝめ20160620 競技プログラミングのすゝめ
20160620 競技プログラミングのすゝめ
 
グラフと木
グラフと木グラフと木
グラフと木
 
競技プログラミングにおけるコードの書き方とその利便性
競技プログラミングにおけるコードの書き方とその利便性競技プログラミングにおけるコードの書き方とその利便性
競技プログラミングにおけるコードの書き方とその利便性
 
人は1ヶ月でエンジニアになれるのか
人は1ヶ月でエンジニアになれるのか人は1ヶ月でエンジニアになれるのか
人は1ヶ月でエンジニアになれるのか
 
「スキルなし・実績なし」 32歳窓際エンジニアがシリコンバレーで働くようになるまで
「スキルなし・実績なし」 32歳窓際エンジニアがシリコンバレーで働くようになるまで「スキルなし・実績なし」 32歳窓際エンジニアがシリコンバレーで働くようになるまで
「スキルなし・実績なし」 32歳窓際エンジニアがシリコンバレーで働くようになるまで
 
人は一ヶ月でエンジニアになれるのか - 詳細解説
人は一ヶ月でエンジニアになれるのか - 詳細解説人は一ヶ月でエンジニアになれるのか - 詳細解説
人は一ヶ月でエンジニアになれるのか - 詳細解説
 
学生時代に知っておきたかったWeb技術の学び方の学び方 | リブセンス
学生時代に知っておきたかったWeb技術の学び方の学び方 | リブセンス学生時代に知っておきたかったWeb技術の学び方の学び方 | リブセンス
学生時代に知っておきたかったWeb技術の学び方の学び方 | リブセンス
 

Último

Último (11)

Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 

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