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
基礎的な動的計画法トピック - ICPC 国内予選突破に向けて
Search
tsutaj
June 07, 2018
Programming
0
11
基礎的な動的計画法トピック - ICPC 国内予選突破に向けて
スライド内のリンクを見たい方はこちら:
https://hcpc-hokudai.github.io/archive/dynamic_programming_fundamental_dp.pdf
tsutaj
June 07, 2018
Tweet
Share
More Decks by tsutaj
See All by tsutaj
正しく作るランダムケース
tsutaj
0
1.1k
競プロ作問を支える技術
tsutaj
0
1.4k
数え上げテクニック Hard
tsutaj
0
21
プログラミングコンテスト入門 - AtCoder Beginners Selection を解いてみよう
tsutaj
0
35
分割統治法 - 問題を小さく分けてまとめよう
tsutaj
0
25
包除原理 - 解ける数え上げの範囲を広げよう
tsutaj
0
19
文字列 DP (応用編) - 文字列を華麗に扱おう
tsutaj
0
15
競技プログラミングのための FFT - 多項式乗算の高速化ことはじめ
tsutaj
0
11
確率 DP を極めよう - 確率と期待値の問題解説
tsutaj
0
26
Other Decks in Programming
See All in Programming
Le côté obscur des IA génératives
pascallemerrer
0
140
複雑化したリポジトリをなんとかした話 pipenvからuvによるモノレポ構成への移行
satoshi256kbyte
1
1k
GitHub Actions × AWS OIDC連携の仕組みと経緯を理解する
ota1022
0
250
Devvox Belgium - Agentic AI Patterns
kdubois
1
110
チームの境界をブチ抜いていけ
tokai235
0
160
Writing Better Go: Lessons from 10 Code Reviews
konradreiche
0
240
What's new in Spring Modulith?
olivergierke
1
140
Go Conference 2025: Goで体感するMultipath TCP ― Go 1.24 時代の MPTCP Listener を理解する
takehaya
9
1.6k
高度なUI/UXこそHotwireで作ろう Kaigi on Rails 2025
naofumi
4
3.9k
CSC305 Lecture 03
javiergs
PRO
0
240
ポスターセッション: 「まっすぐ行って、右!」って言ってラズパイカーを動かしたい 〜生成AI × Raspberry Pi Pico × Gradioの試作メモ〜
komofr
0
1.2k
Catch Up: Go Style Guide Update
andpad
0
210
Featured
See All Featured
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
26
3.1k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
45
2.5k
Statistics for Hackers
jakevdp
799
220k
Mobile First: as difficult as doing things right
swwweet
224
10k
GraphQLとの向き合い方2022年版
quramy
49
14k
Bootstrapping a Software Product
garrettdimon
PRO
307
110k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
46
7.7k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
127
53k
[RailsConf 2023] Rails as a piece of cake
palkan
57
5.9k
KATA
mclloyd
32
15k
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4k
Building Better People: How to give real-time feedback that sticks.
wjessup
368
20k
Transcript
جૅతͳಈతܭը๏τϐοΫ ICPC ࠃ༧બಥഁʹ͚ͯ tsutaj (@tsutaj) Hokkaido University M1 June 7,
2018 tsutaj (Hokkaido Univ.) جૅతͳಈతܭը๏τϐοΫ June 7, 2018 1 / 14
1 ͡Ίʹ 2 ෦ 3 φοϓβοΫ 4 ࣮ફʹઓʂ tsutaj (Hokkaido
Univ.) جૅతͳಈతܭը๏τϐοΫ June 7, 2018 2 / 14
ಈతܭը๏ͱ ಈతܭը๏ (Dynamic Programming) Λෳͷ෦ʹ͚ͯɼͦΕΛ౷߹ͯ͠ղ͘ख๏ ಉ͡ͱΈͳͤΔঢ়ଶΛݟۃΊͯɼ·ͱΊΔ ൚༻ੑ͕ΊͪΌΊͪΌ͋Δ tsutaj (Hokkaido Univ.)
جૅతͳಈతܭը๏τϐοΫ June 7, 2018 3 / 14
ঢ়ଶΛ·ͱΊΔɺͱʁ ঢ়ଶΛ·ͱΊΔͱͲ͏͍͏͜ͱͳͷ͔ʁ ྫͱͯ͠ҎԼͷΛߟ͑Δ ֊ஈͷ΅Γ N ஈ͔ΒͳΔ֊ஈ͕͋Δ 1 ஈͷ΅Δ͔ɺ2 ஈҰؾʹͷ΅Δ͔Ͱ͖Δ ͪΐ͏Ͳ
N ஈͷ΅Δํ๏Կ௨Γ͋Δ͔ʁ ྫ͑ 4 ஈͷ΅Δํ๏ɺ {1, 1, 1, 1} , {1, 1, 2} , {1, 2, 1} , {2, 1, 1} , {2, 2} ͷ 5 ௨Γ tsutaj (Hokkaido Univ.) جૅతͳಈతܭը๏τϐοΫ June 7, 2018 4 / 14
ঢ়ଶΛ·ͱΊΔɺͱʁ i ஈ·Ͱͷ΅ͬͨ࣌ͷ௨ΓΛΔͨΊʹɺͲΜͳใ͕Θ͔͍ͬͯ ΕΑ͍͔ʁ tsutaj (Hokkaido Univ.) جૅతͳಈతܭը๏τϐοΫ June 7,
2018 5 / 14
ঢ়ଶΛ·ͱΊΔɺͱʁ i ஈ·Ͱͷ΅ͬͨ࣌ͷ௨ΓΛΔͨΊʹɺͲΜͳใ͕Θ͔͍ͬͯ ΕΑ͍͔ʁ Ұʹͷ΅ΕΔͷ 1 ஈ·ͨ 2 ஈͳͷ͔ͩΒɾɾɾ i
− 1 ஈ·Ͱͷ΅ͬͨ௨Γͱɺi − 2 ஈ·Ͱͷ΅ͬͨ௨Γ͕Θ ͔͍ͬͯΕɺٻΊΒΕͦ͏ʂ ௨Γͷใ͚ͩ͋ΕΑ͘ɺ۩ମతʹͲΜͳͷ΅Γ͔ͨΛ͖ͯͨ͠ ͔֮͑Δඞཁ͕ͳ͍ʂ ֊ஈͷ΅Γͷղ๏ ai := i ஈ·Ͱͷ΅Δ߹ͷ ͱͨ͠ͱ͖ɺ ai = 0 i < 0 1 i = 0 ai−1 + ai−2 ͦΕҎ֎ (1) ͑ͱͳΔͷ aN ͷ tsutaj (Hokkaido Univ.) جૅతͳಈతܭը๏τϐοΫ June 7, 2018 5 / 14
ঢ়ଶΛ·ͱΊΔɺͱʁ ͜ͷΑ͏ʹɺطʹܭࢉࡁΈͷใΛΈ߹Θͤͯʮ৽ͨͳใʯΛಘ ͍ͯ͘ํ๏͕ɺಈతܭը๏ʂ લͷঢ়ଶΛΈ߹ΘͤΔͨΊɺԽࣜͷܗʹͳΔ (ͪͳΈʹઌ΄ͲͷͰొͨ͠ྻϑΟϘφονྻͱಉ͡Ͱ͢) ্͑͛Ͱ͋Ζ͏͕࠷େɾ࠷খͰ͋Ζ͏͕ yes/no Ͱ͋Ζ͏ ͕ɺߟ͑ํશ͘ಉ͡ʂ ͖ͬ͞ͷͷ֦ுΛߟ͑ͯΈΑ͏
(ࢉΕ O(1) ͳͷצห) ͪΐ͏Ͳ N ஈͷ΅ΔΑ͏ͳͷ΅Γ͔ͨͷ͏ͪɺεςοϓͷ࠷খΛ DP Ͱղ͘ʹʁ ͪΐ͏Ͳ K εςοϓͰͪΐ͏Ͳ N ஈͷ΅ΕΔ͔Ͳ͏͔Λ DP Ͱղ͘ ʹʁ tsutaj (Hokkaido Univ.) جૅతͳಈతܭը๏τϐοΫ June 7, 2018 6 / 14
෦ ෦ ࣗવू߹ S = {a1, a2, · · ·
, aN } ͕͋Δ S ͷࣈͦΕͧΕ 1 ͚ͩ͑Δ S ͷࣈΛΈ߹Θͤͯ W Λ࡞Δ͜ͱՄೳ͔ʁ ྫ: S = {1, 2, 8} ͔Β W = 10 ࡞ΕΔ͕ɺW = 7 ࡞Εͳ͍ ԽࣜΛ࡞ͬͯΈΑ͏ʂ (ώϯτ: ೋ࣍ݩͷԽࣜ) tsutaj (Hokkaido Univ.) جૅతͳಈతܭը๏τϐοΫ June 7, 2018 7 / 14
෦ ෦ ࣗવू߹ S = {a1, a2, · · ·
, aN } ͕͋Δ S ͷࣈͦΕͧΕ 1 ͚ͩ͑Δ S ͷࣈΛΈ߹Θͤͯ W Λ࡞Δ͜ͱՄೳ͔ʁ ྫ: S = {1, 2, 8} ͔Β W = 10 ࡞ΕΔ͕ɺW = 7 ࡞Εͳ͍ ԽࣜΛ࡞ͬͯΈΑ͏ʂ (ώϯτ: ೋ࣍ݩͷԽࣜ) dp[i ൪ͷཁૉ·Ͱͬͯ][߹ܭ͕ j Ͱ͋Δঢ়ଶ] := True / False ભҠͲͷΑ͏ʹͳΔʁ tsutaj (Hokkaido Univ.) جૅతͳಈతܭը๏τϐοΫ June 7, 2018 7 / 14
෦ ෦ ࣗવू߹ S = {a1, a2, · · ·
, aN } ͕͋Δ S ͷࣈͦΕͧΕ 1 ͚ͩ͑Δ S ͷࣈΛΈ߹Θͤͯ W Λ࡞Δ͜ͱՄೳ͔ʁ ྫ: S = {1, 2, 8} ͔Β W = 10 ࡞ΕΔ͕ɺW = 7 ࡞Εͳ͍ ԽࣜΛ࡞ͬͯΈΑ͏ʂ (ώϯτ: ೋ࣍ݩͷԽࣜ) dp[i ൪ͷཁૉ·Ͱͬͯ][߹ܭ͕ j Ͱ͋Δঢ়ଶ] := True / False ભҠͲͷΑ͏ʹͳΔʁ i ൪ͷཁૉΛʮ͠߹ΘͤΔʯ߹ͱʮ͋͠Θͤͳ͍ʯ߹͕͋Δ i ൪ͷཁૉͷΛ ai ͱ͓͘ ͋͠ΘͤΔͱɺ߹ܭ ai ૿͑Δ ˠ ߹ܭ͕ j − ai Ͱ͋Δঢ়ଶΛࢀরʂ ͋͠Θͤͳ͍ͱɺ߹ܭ૿͑ͳ͍ ˠ ߹ܭ͕ j Ͱ͋Δঢ়ଶΛࢀরʂ Ͳ͏࣮͢Ε͍͍ͷʁ tsutaj (Hokkaido Univ.) جૅతͳಈతܭը๏τϐοΫ June 7, 2018 7 / 14
෦ ͜ͷΑ͏ͳ࣮ʹͳΔ tsutaj (Hokkaido Univ.) جૅతͳಈతܭը๏τϐοΫ June 7, 2018 8
/ 14
෦ ֊ஈͷ΅Γͷͱ͖ͱಉ༷ʹɺyes / no Ҏ֎ʹ༷ʑͳܗʹൃలͰ ͖Δʂ ߹ܭ͕ͪΐ͏Ͳ W ʹͳΔΑ͏ͳཁૉͷબͼํԿ௨Γ͋Δʁ ߹ܭ͕ͪΐ͏Ͳ
W ʹͳΔΑ͏ͳཁૉͷબͼํͷதͰɺબͿཁૉͷ ࠷খ (࠷େ) ͍͘Β͔ʁ ू߹ S ͷཁૉΛΈ߹ΘͤͯͰ͖Δશ෦ͰԿ௨Γ͋Δʁ (Կ બͳ͍߹ͷ 0 Χϯτ) ઌ΄ͲͷԽࣜΛগ͠ม͑ΔͱରԠͰ͖ΔͷͰɺͬͯΈΑ͏ʂ tsutaj (Hokkaido Univ.) جૅతͳಈతܭը๏τϐοΫ June 7, 2018 9 / 14
φοϓβοΫ 01 φοϓβοΫ ༰ྔ C ͷφοϓβοΫͱɺN ݸͷ͕͋Δ i ൪ͷ༰ྔ ci
ͰɺͦͷՁ vi બΜͩͷ༰ྔͷ߹ܭ͕ C Λ͑ͳ͍ൣғͰɺΛࣗ༝ʹબͰ ͖Δ બΜͩͷՁͷ߹ܭͷ࠷େ͍͘Β͔ʁ Լͷը૾ͩͱՁͷ߹ܭ 8 υϧ͕࠷େ (༰ྔͷ߹ܭ 15 kg) tsutaj (Hokkaido Univ.) جૅతͳಈతܭը๏τϐοΫ June 7, 2018 10 / 14
φοϓβοΫ ԽࣜΛ࡞ͬͯΈΑ͏ʂ (ώϯτ: ೋ࣍ݩͷԽࣜ) tsutaj (Hokkaido Univ.) جૅతͳಈతܭը๏τϐοΫ June 7,
2018 11 / 14
φοϓβοΫ ԽࣜΛ࡞ͬͯΈΑ͏ʂ (ώϯτ: ೋ࣍ݩͷԽࣜ) dp[i ൪ͷ·Ͱͬͯ][༰ྔ߹ܭ͕ j] := Ձ߹ܭͷ࠷େ ભҠͲͷΑ͏ʹͳΔʁ
tsutaj (Hokkaido Univ.) جૅతͳಈతܭը๏τϐοΫ June 7, 2018 11 / 14
φοϓβοΫ ԽࣜΛ࡞ͬͯΈΑ͏ʂ (ώϯτ: ೋ࣍ݩͷԽࣜ) dp[i ൪ͷ·Ͱͬͯ][༰ྔ߹ܭ͕ j] := Ձ߹ܭͷ࠷େ ભҠͲͷΑ͏ʹͳΔʁ
i ൪ͷΛʮ͠߹ΘͤΔʯ߹ͱʮ͋͠Θͤͳ͍ʯ߹͕͋Δ ͋͠ΘͤΔͱɺ༰ྔ߹ܭ ci ૿͑ɺՁ߹ܭ vi ૿͑Δ ༰ྔ߹ܭ͕ j − ci Ͱ͋Δঢ়ଶΛࢀর ͦͷঢ়ଶʹ͓͚ΔՁ߹ܭͷ࠷େʹ vi Λͨ͠ͷΛ͓͏ʂ ͋͠Θͤͳ͍ͱɺ༰ྔ߹ܭՁ߹ܭ૿͑ͳ͍ j Ͱ͋Δঢ়ଶΛࢀরʂ ͭ·Γɺ͖ͬ͞ͷ෦ͱߟ͑ํ΄΅ಉ͡ʂ tsutaj (Hokkaido Univ.) جૅతͳಈతܭը๏τϐοΫ June 7, 2018 11 / 14
φοϓβοΫ ͜ͷΑ͏ͳ࣮ʹͳΔ tsutaj (Hokkaido Univ.) جૅతͳಈతܭը๏τϐοΫ June 7, 2018 12
/ 14
ͦͷଞͷ ,2 ࠓճ࣌ؒͷ߹্ೖฤ͔͠ѻ͑·ͤΜ͕ɺಈతܭը๏ʹ͞·͟ ·ͳδϟϯϧ͕͋Γ·͢ bit DP (2017 D )
۠ؒ DP (2016 D ) ܻ DP DP ૠೖ DP ͳͲͳͲɾɾɾ ༷ʑͳछྨͷΛղ͍ͯͳΕ͓ͯ͘ͱɺରԠ͘͢͠ͳΔͱࢥ͍ ·͢ tsutaj (Hokkaido Univ.) جૅతͳಈతܭը๏τϐοΫ June 7, 2018 13 / 14
࣮ફ ࣮ࡍʹΛղ͍ͯΈΑ͏ʂ DP ͷΛूΊͨόʔνϟϧίϯςετΛ༻ҙ͍ͯ͠·͢ͷͰɺऔ ΓΜͰΈ͍ͯͩ͘͞ɻ Div1 Link Div2 Link ίϯςετ࣌ؒ
19:25 ʙ 20:40 Ͱ͢ɻ ऴྃޙʹ Div2 ͷ֤ʹ͍ͭͯ؆୯ʹղઆΛߦ͍·͢ɻ tsutaj (Hokkaido Univ.) جૅతͳಈతܭը๏τϐοΫ June 7, 2018 14 / 14