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
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
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
Oxlintはいいぞ
yug1224
5
1.3k
今から始めるClaude Code超入門
448jp
8
9k
それ、本当に安全? ファイルアップロードで見落としがちなセキュリティリスクと対策
penpeen
7
3.9k
AIによる高速開発をどう制御するか? ガードレール設置で開発速度と品質を両立させたチームの事例
tonkotsuboy_com
7
2.4k
責任感のあるCloudWatchアラームを設計しよう
akihisaikeda
3
180
例外処理とどう使い分ける?Result型を使ったエラー設計 #burikaigi
kajitack
16
6.1k
開発者から情シスまで - 多様なユーザー層に届けるAPI提供戦略 / Postman API Night Okinawa 2026 Winter
tasshi
0
200
生成AIを使ったコードレビューで定性的に品質カバー
chiilog
1
270
2026年 エンジニアリング自己学習法
yumechi
0
140
[KNOTS 2026登壇資料]AIで拡張‧交差する プロダクト開発のプロセス および携わるメンバーの役割
hisatake
0
290
そのAIレビュー、レビューしてますか? / Are you reviewing those AI reviews?
rkaga
6
4.6k
Package Management Learnings from Homebrew
mikemcquaid
0
230
Featured
See All Featured
Designing for Performance
lara
610
70k
The B2B funnel & how to create a winning content strategy
katarinadahlin
PRO
1
280
世界の人気アプリ100個を分析して見えたペイウォール設計の心得
akihiro_kokubo
PRO
66
37k
The Language of Interfaces
destraynor
162
26k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
254
22k
エンジニアに許された特別な時間の終わり
watany
106
230k
Fantastic passwords and where to find them - at NoRuKo
philnash
52
3.6k
Building a Modern Day E-commerce SEO Strategy
aleyda
45
8.7k
Between Models and Reality
mayunak
1
190
Collaborative Software Design: How to facilitate domain modelling decisions
baasie
0
140
Believing is Seeing
oripsolob
1
56
Avoiding the “Bad Training, Faster” Trap in the Age of AI
tmiket
0
77
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