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

CTRL - 2016/03/02 DP勉強会

h1dia
March 02, 2016

CTRL - 2016/03/02 DP勉強会

h1dia

March 02, 2016
Tweet

More Decks by h1dia

Other Decks in Programming

Transcript

  1. リスの問題 • N (1≤N≤1000) 匹のリスが一列に並んでいる。左 から i 匹目のリスには、整数 a i

    が書かれている。 この中から何匹かのリスにぶどうをのせ、ぶどう の乗ったリスにかかれた整数が左から昇順に並ん でいるようにしたい。最大何匹のリスにぶどうを 乗せられるか。
  2. リスの問題 0 1 2 3 4 5 6 1 2

    3 4 5 学生 リス • N (1≤N≤1000) 匹のリスが一列に並んでいる。
  3. リスの問題 0 1 2 3 4 5 6 1 2

    3 4 5 リス リス • リスにぶどうを乗せる • ぶどうを乗せたリスの高さが左から昇順に並んで いるようにしたい
  4. リスの問題 0 1 2 3 4 5 6 1 2

    3 4 5 リス リス • 最大何匹のリスにぶどうを乗せられる?
  5. リスの問題 0 1 2 3 4 5 6 1 2

    3 4 5 リス リス • 解
  6. まともに解こうとする • N = 5 のとき、2 から 5 の範囲で全探索 –

    5C2 + 5C3 + 5C4 + 5C5 = 10 + 10 + 5 + 1 – O(n^2) • もう少し計算量を減らしたい
  7. よく考える 0 1 2 3 4 5 6 7 8

    1 2 3 4 5 6 7 リス リス • なんか増えた
  8. よく考える 0 1 2 3 4 5 6 7 8

    1 2 3 4 5 6 7 リス リス • 3匹目に着目する
  9. よく考える 0 1 2 3 4 5 6 7 8

    1 2 3 4 5 6 7 リス リス • 3匹目にぶどうが乗っているとき、1匹目には必ずぶどう が乗る
  10. よく考える 0 1 2 3 4 5 6 7 8

    1 2 3 4 5 6 7 リス リス • 4匹目に着目する
  11. よく考える 0 1 2 3 4 5 6 7 8

    1 2 3 4 5 6 7 リス リス • 4匹目にぶどうが乗っているとき、3匹目には必ずぶどう が乗る -> 1匹目にも乗っている
  12. 漸化式 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
  13. わかりづらいので 0 1 2 3 4 5 6 7 8

    1 2 3 4 5 6 7 リス リス • n = 1 1
  14. わかりづらいので 0 1 2 3 4 5 6 7 8

    1 2 3 4 5 6 7 リス リス • n = 2 1 2
  15. わかりづらいので 0 1 2 3 4 5 6 7 8

    1 2 3 4 5 6 7 リス リス • n = 3 2 1 2
  16. わかりづらいので 0 1 2 3 4 5 6 7 8

    1 2 3 4 5 6 7 リス リス • n = 4 2 1 2 3
  17. わかりづらいので 0 1 2 3 4 5 6 7 8

    1 2 3 4 5 6 7 リス リス • n = 5 2 1 2 3 1
  18. わかりづらいので 0 1 2 3 4 5 6 7 8

    1 2 3 4 5 6 7 リス リス • n = 6 2 1 2 3 1 2
  19. わかりづらいので 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
  20. もういちど 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
  21. 実装してみよう • N n_1, n_2, n_3 … n_N の形で値が与えられます。 リスの数

    N(3 ≦ N ≦ 1000) リスの高さ(整数) 乗せられるぶどうの最大数を出力してください。 例 7 3 6 4 5 1 2 7 出力 4
  22. AOJ

  23. Kannondou • 階段は 1 ~ 30段 • 飛び方は3種類 – 1段進む

    – 2段進む – 3段進む • 30段目に行くために、3種類の飛び方を組み合わせた 飛び方の数は…?
  24. A First Grader • 計算結果を保存していく! – Ex) 1 1 1

    1 1 1 – DP[N][21] のような2次元配列を用意する
  25. A First Grader • 計算結果を保存していく! – Ex) 1 1 1

    1 1 1 » (1 + 0)と(1 - 0)として考える 0 1 2 3 4 5 6 1
  26. A First Grader • 計算結果を保存していく! – Ex) 1 1 1

    1 1 1 » (1 + 1) , (1 – 1) 0 1 2 3 4 5 6 1 1 1
  27. 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
  28. 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