Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
CTRL - 2016/03/02 DP勉強会
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
h1dia
March 02, 2016
Programming
0
160
CTRL - 2016/03/02 DP勉強会
h1dia
March 02, 2016
Tweet
Share
More Decks by h1dia
See All by h1dia
アレ
h1dia
0
130
slide
h1dia
0
180
Other Decks in Programming
See All in Programming
15年続くIoTサービスのSREエンジニアが挑む分散トレーシング導入
melonps
2
220
2026年 エンジニアリング自己学習法
yumechi
0
140
そのAIレビュー、レビューしてますか? / Are you reviewing those AI reviews?
rkaga
6
4.6k
Raku Raku Notion 20260128
hareyakayuruyaka
0
340
SourceGeneratorのススメ
htkym
0
200
AIと一緒にレガシーに向き合ってみた
nyafunta9858
0
250
AtCoder Conference 2025
shindannin
0
1.1k
例外処理とどう使い分ける?Result型を使ったエラー設計 #burikaigi
kajitack
16
6.1k
MUSUBIXとは
nahisaho
0
140
高速開発のためのコード整理術
sutetotanuki
1
400
24時間止められないシステムを守る-医療ITにおけるランサムウェア対策の実際
koukimiura
1
110
ノイジーネイバー問題を解決する 公平なキューイング
occhi
0
110
Featured
See All Featured
Conquering PDFs: document understanding beyond plain text
inesmontani
PRO
4
2.3k
Chasing Engaging Ingredients in Design
codingconduct
0
110
Reality Check: Gamification 10 Years Later
codingconduct
0
2k
Why Your Marketing Sucks and What You Can Do About It - Sophie Logan
marketingsoph
0
76
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
16
1.8k
The Anti-SEO Checklist Checklist. Pubcon Cyber Week
ryanjones
0
69
Visualization
eitanlees
150
17k
16th Malabo Montpellier Forum Presentation
akademiya2063
PRO
0
51
Navigating Team Friction
lara
192
16k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.7k
Skip the Path - Find Your Career Trail
mkilby
0
57
Product Roadmaps are Hard
iamctodd
PRO
55
12k
Transcript
みなさん
None
None
頭の体操
フィボナッチ数
フィボナッチ数 • f(n) = f(n-1) + f(n-2) • f(0) =
0 • f(1) = 1 • f(7) = ?
フィボナッチ数 • f(n) = f(n-1) + f(n-2) • f(0) =
0 • f(1) = 1 • f(7) = 13
フィボナッチ数列 • 実装してみよう • 入力 N に対して f(N) となるような出力を返すよ うなプログラム
一般項
実装 • 定義通りにやる – 再帰 • ループによる実装
テスト • ideone.com • N = 10000のとき、このプログラムは動作する?
CTRL春のDP祭り 2016/03/02 h1dia
None
None
DP?
DP(Dynamic Programing) • どうも動的計画法とかいうのが分かってないと 予選突破ができないっぽい • せめて本戦くらいには出たいよね – だって本戦行けばタダで音ゲーできるんだよ!!
None
None
計算量 • 再帰による実装はf(0) または f(1) になるまで収束しない • f(5)のとき 5
計算量 • 再帰による実装はf(0) または f(1) になるまで収束しない • f(5)のとき 5 4
3
計算量 • 再帰による実装はf(0) または f(1) になるまで収束しない • f(5)のとき 5 4
3 3 2 1 2
計算量 • 再帰による実装はf(0) または f(1) になるまで収束しない • f(5)のとき 5 4
3 3 2 1 2 2 1 0 1 1 0
計算量 • 再帰による実装はf(0) または f(1) になるまで収束しない • f(5)のとき 5 4
3 3 2 1 2 2 1 0 1 1 0 0 1
計算量 • 再帰による実装はf(0) または f(1) になるまで収束しない • f(5)のとき 5 4
3 3 2 1 2 2 1 0 1 1 0 0 1 O(2^n)
計算量 • 配列とループによる実装 • f(n-1) と f(n-2) を逐一計算する • f(5)のとき
計算量 • 配列とループによる実装 • f(n-1) と f(n-2) を逐一計算する • f(5)のとき
1
計算量 • 配列とループによる実装 • f(n-1) と f(n-2) を逐一計算する • f(5)のとき
1 1
計算量 • 配列とループによる実装 • f(n-1) と f(n-2) を逐一計算する • f(5)のとき
1 1 2
計算量 • 配列とループによる実装 • f(n-1) と f(n-2) を逐一計算する • f(5)のとき
1 1 2 3
計算量 • 配列とループによる実装 • f(n-1) と f(n-2) を逐一計算する • f(5)のとき
1 1 2 3 5 O(n)
ポイント • 計算結果を逐一メモしていくことで 計算量を減らす
リスの問題 • N (1≤N≤1000) 匹のリスが一列に並んでいる。左 から i 匹目のリスには、整数 a i
が書かれている。 この中から何匹かのリスにぶどうをのせ、ぶどう の乗ったリスにかかれた整数が左から昇順に並ん でいるようにしたい。最大何匹のリスにぶどうを 乗せられるか。
リスの問題 0 1 2 3 4 5 6 1 2
3 4 5 学生 リス • N (1≤N≤1000) 匹のリスが一列に並んでいる。
リスの問題 0 1 2 3 4 5 6 1 2
3 4 5 リス リス • リスにぶどうを乗せる • ぶどうを乗せたリスの高さが左から昇順に並んで いるようにしたい
リスの問題 0 1 2 3 4 5 6 1 2
3 4 5 リス リス • 最大何匹のリスにぶどうを乗せられる?
リスの問題 0 1 2 3 4 5 6 1 2
3 4 5 リス リス • 解
まともに解こうとする • N = 5 のとき、2 から 5 の範囲で全探索 –
5C2 + 5C3 + 5C4 + 5C5 = 10 + 10 + 5 + 1 – O(n^2) • もう少し計算量を減らしたい
よく考える 0 1 2 3 4 5 6 7 8
1 2 3 4 5 6 7 リス リス • なんか増えた
よく考える 0 1 2 3 4 5 6 7 8
1 2 3 4 5 6 7 リス リス • 3匹目に着目する
よく考える 0 1 2 3 4 5 6 7 8
1 2 3 4 5 6 7 リス リス • 3匹目にぶどうが乗っているとき、1匹目には必ずぶどう が乗る
よく考える 0 1 2 3 4 5 6 7 8
1 2 3 4 5 6 7 リス リス • 4匹目に着目する
よく考える 0 1 2 3 4 5 6 7 8
1 2 3 4 5 6 7 リス リス • 4匹目にぶどうが乗っているとき、3匹目には必ずぶどう が乗る -> 1匹目にも乗っている
漸化式 0 1 2 3 4 5 6 7 8
1 2 3 4 5 6 7 リス リス • リスの番号 n は、自分よりも高さの低い リスの番号 1 ~ n – 1までのぶどうの最大数 + 1 をとる 1 2 3 2
わかりづらいので 0 1 2 3 4 5 6 7 8
1 2 3 4 5 6 7 リス リス • n = 1 1
わかりづらいので 0 1 2 3 4 5 6 7 8
1 2 3 4 5 6 7 リス リス • n = 2 1 2
わかりづらいので 0 1 2 3 4 5 6 7 8
1 2 3 4 5 6 7 リス リス • n = 3 2 1 2
わかりづらいので 0 1 2 3 4 5 6 7 8
1 2 3 4 5 6 7 リス リス • n = 4 2 1 2 3
わかりづらいので 0 1 2 3 4 5 6 7 8
1 2 3 4 5 6 7 リス リス • n = 5 2 1 2 3 1
わかりづらいので 0 1 2 3 4 5 6 7 8
1 2 3 4 5 6 7 リス リス • n = 6 2 1 2 3 1 2
わかりづらいので 0 1 2 3 4 5 6 7 8
1 2 3 4 5 6 7 リス リス • n = 7 2 1 2 3 1 2 4
もういちど 0 1 2 3 4 5 6 7 8
1 2 3 4 5 6 7 リス リス • リスの番号 n は、自分よりも高さの低い リスの番号 1 ~ n – 1までのぶどうの最大数 + 1 をとる 1 2 3 2
実装してみよう • N n_1, n_2, n_3 … n_N の形で値が与えられます。 リスの数
N(3 ≦ N ≦ 1000) リスの高さ(整数) 乗せられるぶどうの最大数を出力してください。 例 7 3 6 4 5 1 2 7 出力 4
AOJ
フォーラムに2問 • Kannondou • The First Grade • 解いてみよう
観音堂
Kannondou • 階段は 1 ~ 30段 • 飛び方は3種類 – 1段進む
– 2段進む – 3段進む • 30段目に行くために、3種類の飛び方を組み合わせた 飛び方の数は…?
Kannondou 0段目 1段目 2段目 3段目 4段目
Kannondou 0段目 1段目 2段目 3段目 4段目 1
Kannondou 0段目 1段目 2段目 3段目 4段目
Kannondou 0段目 1段目 2段目 3段目 4段目 2
Kannondou 0段目 1段目 2段目 3段目 4段目
Kannondou 0段目 1段目 2段目 3段目 4段目
Kannondou 0段目 1段目 2段目 3段目 4段目
Kannondou 0段目 1段目 2段目 3段目 4段目 4
Kannondou 0段目 1段目 2段目 3段目 4段目
Kannondou 0段目 1段目 2段目 3段目 4段目
Kannondou 0段目 1段目 2段目 3段目 4段目
Kannondou 0段目 1段目 2段目 3段目 4段目
Kannondou 0段目 1段目 2段目 3段目 4段目
Kannondou 0段目 1段目 2段目 3段目 4段目
Kannondou 0段目 1段目 2段目 3段目 4段目 7
Kannondou • N 段目に到達できるのは、N-1 N-2 N-3段目のみ • N-1 N-2 N-3段目までの数の和
• N = N-1 + N-2 + N-3 – トリボナッチ数列
1ねんせい
A First Grader • 計算の組み合わせの数?
A First Grader • 計算の組み合わせの数? 4 3 7
A First Grader • 計算の組み合わせの数? 4 3 7 + -
A First Grader • 計算の組み合わせの数? – すべての計算式の数は2^n個 4 3 7
+ - + - + -
A First Grader • 計算結果を保存していく! – Ex) 1 1 1
1 1 1 – DP[N][21] のような2次元配列を用意する
A First Grader • 計算結果を保存していく! – Ex) 1 1 1
1 1 1 » (1 + 0)と(1 - 0)として考える 0 1 2 3 4 5 6 1
A First Grader • 計算結果を保存していく! – Ex) 1 1 1
1 1 1 » (1 + 1) , (1 – 1) 0 1 2 3 4 5 6 1 1 1
A First Grader • 計算結果を保存していく! – Ex) 1 1 1
1 1 1 • (2 + 1), (2 – 1), (0 + 1), (0 – 1) 0 1 2 3 4 5 6 1 1 1 2 1
A First Grader • 計算結果を保存していく! – Ex) 1 1 1
1 1 1 0 1 2 3 4 5 6 1 1 1 2 2 3 1 1
A First Grader • 計算結果を保存していく! – Ex) 1 1 1
1 1 1 0 1 2 3 4 5 6 1 1 1 2 2 3 5 1 1 4 1
A First Grader • 計算結果を保存していく! – Ex) 1 1 1
1 1 1 (配列のインデックスが解答になる) 0 1 2 3 4 5 6 1 1 1 2 2 3 5 1 1 4 1