Upgrade to Pro — share decks privately, control downloads, hide ads and more …

基礎的な動的計画法トピック - ICPC 国内予選突破に向けて

基礎的な動的計画法トピック - ICPC 国内予選突破に向けて

スライド内のリンクを見たい方はこちら:https://hcpc-hokudai.github.io/archive/dynamic_programming_fundamental_dp.pdf

Avatar for tsutaj

tsutaj

June 07, 2018
Tweet

More Decks by tsutaj

Other Decks in Programming

Transcript

  1. جૅతͳಈతܭը๏τϐοΫ ICPC ࠃ಺༧બಥഁʹ޲͚ͯ tsutaj (@tsutaj) Hokkaido University M1 June 7,

    2018 tsutaj (Hokkaido Univ.) جૅతͳಈతܭը๏τϐοΫ June 7, 2018 1 / 14
  2. 1 ͸͡Ίʹ 2 ෦෼࿨໰୊ 3 φοϓβοΫ໰୊ 4 ࣮ફ໰୊ʹ௅ઓʂ tsutaj (Hokkaido

    Univ.) جૅతͳಈతܭը๏τϐοΫ June 7, 2018 2 / 14
  3. ঢ়ଶΛ·ͱΊΔɺͱ͸ʁ ঢ়ଶΛ·ͱΊΔͱ͸Ͳ͏͍͏͜ͱͳͷ͔ʁ ྫͱͯ͠ҎԼͷ໰୊Λߟ͑Δ ֊ஈͷ΅Γ 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
  4. ঢ়ଶΛ·ͱΊΔɺͱ͸ʁ 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
  5. ঢ়ଶΛ·ͱΊΔɺͱ͸ʁ ͜ͷΑ͏ʹɺطʹܭࢉࡁΈͷ৘ใΛ૊Έ߹Θͤͯʮ৽ͨͳ৘ใʯΛಘ ͍ͯ͘ํ๏͕ɺಈతܭը๏ʂ લͷঢ়ଶΛ૊Έ߹ΘͤΔͨΊɺ઴ԽࣜͷܗʹͳΔ (ͪͳΈʹઌ΄Ͳͷ໰୊Ͱొ৔ͨ͠਺ྻ͸ϑΟϘφον਺ྻͱಉ͡Ͱ͢) ਺্͑͛Ͱ͋Ζ͏͕࠷େɾ࠷খ໰୊Ͱ͋Ζ͏͕ yes/no ໰୊Ͱ͋Ζ͏ ͕ɺߟ͑ํ͸શ͘ಉ͡ʂ ͖ͬ͞ͷ໰୊ͷ֦ுΛߟ͑ͯΈΑ͏

    (ࢉ਺΍Ε͹ O(1) ͳͷ͸צห) ͪΐ͏Ͳ N ஈͷ΅ΔΑ͏ͳͷ΅Γ͔ͨͷ͏ͪɺεςοϓ਺ͷ࠷খ஋Λ DP Ͱղ͘ʹ͸ʁ ͪΐ͏Ͳ K εςοϓͰͪΐ͏Ͳ N ஈͷ΅ΕΔ͔Ͳ͏͔Λ DP Ͱղ͘ ʹ͸ʁ tsutaj (Hokkaido Univ.) جૅతͳಈతܭը๏τϐοΫ June 7, 2018 6 / 14
  6. ෦෼࿨໰୊ ෦෼࿨໰୊ ࣗવ਺ू߹ S = {a1, a2, · · ·

    , aN } ͕͋Δ S ಺ͷ਺ࣈ͸ͦΕͧΕ 1 ౓͚ͩ࢖͑Δ S ಺ͷ਺ࣈΛ૊Έ߹Θͤͯ W Λ࡞Δ͜ͱ͸Մೳ͔ʁ ྫ: S = {1, 2, 8} ͔Β W = 10 ͸࡞ΕΔ͕ɺW = 7 ͸࡞Εͳ͍ ઴ԽࣜΛ࡞ͬͯΈΑ͏ʂ (ώϯτ: ೋ࣍ݩͷ઴Խࣜ) tsutaj (Hokkaido Univ.) جૅతͳಈతܭը๏τϐοΫ June 7, 2018 7 / 14
  7. ෦෼࿨໰୊ ෦෼࿨໰୊ ࣗવ਺ू߹ 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
  8. ෦෼࿨໰୊ ෦෼࿨໰୊ ࣗવ਺ू߹ 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
  9. ෦෼࿨໰୊ ֊ஈͷ΅Γͷͱ͖ͱಉ༷ʹɺyes / no ໰୊Ҏ֎ʹ΋༷ʑͳܗʹൃలͰ ͖Δʂ ߹ܭ͕ͪΐ͏Ͳ W ʹͳΔΑ͏ͳཁૉͷબͼํ͸Կ௨Γ͋Δʁ ߹ܭ͕ͪΐ͏Ͳ

    W ʹͳΔΑ͏ͳཁૉͷબͼํͷதͰɺબͿཁૉ਺ͷ ࠷খ (࠷େ) ͸͍͘Β͔ʁ ू߹ S ͷཁૉΛ૊Έ߹ΘͤͯͰ͖Δ੔਺͸શ෦ͰԿ௨Γ͋Δʁ (Կ΋ બ͹ͳ͍৔߹ͷ 0 ΋Χ΢ϯτ) ઌ΄Ͳͷ઴ԽࣜΛগ͠ม͑ΔͱରԠͰ͖ΔͷͰɺ΍ͬͯΈΑ͏ʂ tsutaj (Hokkaido Univ.) جૅతͳಈతܭը๏τϐοΫ June 7, 2018 9 / 14
  10. φοϓβοΫ໰୊ 01 φοϓβοΫ໰୊ ༰ྔ C ͷφοϓβοΫͱɺN ݸͷ඼෺͕͋Δ i ൪໨ͷ඼෺͸༰ྔ ci

    ͰɺͦͷՁ஋͸ vi બΜͩ඼෺ͷ༰ྔͷ߹ܭ͕ C Λ௒͑ͳ͍ൣғͰɺ඼෺Λࣗ༝ʹબ୒Ͱ ͖Δ બΜͩ඼෺ͷՁ஋ͷ߹ܭͷ࠷େ஋͸͍͘Β͔ʁ Լͷը૾ͩͱՁ஋ͷ߹ܭ 8 υϧ͕࠷େ (༰ྔͷ߹ܭ 15 kg) tsutaj (Hokkaido Univ.) جૅతͳಈతܭը๏τϐοΫ June 7, 2018 10 / 14
  11. φοϓβοΫ໰୊ ઴ԽࣜΛ࡞ͬͯΈΑ͏ʂ (ώϯτ: ೋ࣍ݩͷ઴Խࣜ) dp[i ൪໨ͷ඼෺·Ͱ࢖ͬͯ][༰ྔ߹ܭ͕ j] := Ձ஋߹ܭͷ࠷େ஋ ભҠ͸ͲͷΑ͏ʹͳΔʁ

    i ൪໨ͷ඼෺Λʮ଍͠߹ΘͤΔʯ৔߹ͱʮ଍͋͠Θͤͳ͍ʯ৔߹͕͋Δ ଍͋͠ΘͤΔͱɺ༰ྔ߹ܭ͸ ci ૿͑ɺՁ஋߹ܭ͸ vi ૿͑Δ ༰ྔ߹ܭ͕ j − ci Ͱ͋Δঢ়ଶΛࢀর ͦͷঢ়ଶʹ͓͚ΔՁ஋߹ܭͷ࠷େʹ vi Λ଍ͨ͠΋ͷΛ࢖͓͏ʂ ଍͋͠Θͤͳ͍ͱɺ༰ྔ߹ܭ΋Ձ஋߹ܭ΋૿͑ͳ͍ j Ͱ͋Δঢ়ଶΛࢀরʂ ͭ·Γɺ͖ͬ͞ͷ෦෼࿨໰୊ͱߟ͑ํ͸΄΅ಉ͡ʂ tsutaj (Hokkaido Univ.) جૅతͳಈతܭը๏τϐοΫ June 7, 2018 11 / 14
  12. ͦͷଞͷ ,2 ࠓճ͸࣌ؒͷ౎߹্ೖ໳ฤ͔͠ѻ͑·ͤΜ͕ɺಈతܭը๏ʹ͸͞·͟ ·ͳδϟϯϧ͕͋Γ·͢ bit DP (2017 ೥ D ໰୊)

    ۠ؒ DP (2016 ೥ D ໰୊) ܻ DP ໦ DP ૠೖ DP ͳͲͳͲɾɾɾ ༷ʑͳछྨͷ໰୊Λղ͍ͯͳΕ͓ͯ͘ͱɺରԠ͠΍͘͢ͳΔͱࢥ͍ ·͢ tsutaj (Hokkaido Univ.) جૅతͳಈతܭը๏τϐοΫ June 7, 2018 13 / 14
  13. ࣮ફ໰୊ ࣮ࡍʹ໰୊Λղ͍ͯΈΑ͏ʂ DP ͷ໰୊ΛूΊͨόʔνϟϧίϯςετΛ༻ҙ͍ͯ͠·͢ͷͰɺऔ Γ૊ΜͰΈ͍ͯͩ͘͞ɻ Div1 Link Div2 Link ίϯςετ࣌ؒ͸

    19:25 ʙ 20:40 Ͱ͢ɻ ऴྃޙʹ Div2 ͷ֤໰୊ʹ͍ͭͯ؆୯ʹղઆΛߦ͍·͢ɻ tsutaj (Hokkaido Univ.) جૅతͳಈతܭը๏τϐοΫ June 7, 2018 14 / 14