[boj] (g4) 2228 구간나누기

강신현·2022년 4월 22일
0

✅ DP

문제

링크

1. 문제 접근 및 해결 로직

  • 정의
    dp[n][m]dp[n][m] : 1~n 번째 인덱스까지의 배열에서 m개의 구간을 선택했을 때 구간합의 최대 값 메모이제이션
    solve(n,m)solve(n, m) : 1~n 번째 인덱스까지의 배열에서 m개의 구간을 선택했을 때 구간합의 최대 값 구하는 함수
  • 구하는 답
  • 초기값
  • 점화식
    dp[n][m]=max(solve(n1,m),solve(i2,m1)+sum)dp[n][m]=max(solve(n-1, m),solve(i-2, m-1)+sum)
    sumsum : nn에서 ii까지 구간의 원소 합
  • n번째 원소를 어느 구간에도 포함하지 않을 경우
    n을 제외한 범위를 다시 조정하여 구간합의 최대 값을 구한다.
    dp[n][m]=solve(n1,m)dp[n][m]=solve(n-1, m)
  • n번째 원소를 한구간의 원소로 포함하는 경우
    dp[n][m]=solve(i2,m1)+sumdp[n][m]=solve(i-2, m-1)+sum
    (구간끼리는 인접할 수 없으므로 i1i-1이 아니라 i2i-2가 들어감, n번째 원소가 포함한 구간을 하나 사용했으므로 m1m-1개의 구간을 찾음)
  • n번째 원소를 하나의 원소로 갖는 구간의 경우는 생각하지 않는다. 왜냐하면

https://velog.io/@keybomb/BOJ-2228-%EA%B5%AC%EA%B0%84-%EB%82%98%EB%88%84%EA%B8%B0-C

2. 코드

3. 시간 복잡도 분석

경우의 수를 모두 구하므로
O(N)O(N)

4. 문제에서 중요한 부분

DP문제는 점화식을 도출하는 것이 중요하다.
Bottm Up(반복문)으로 풀지 Top Down(재귀)으로 풀지는 선택사항

profile
땅콩의 모험 (server)

0개의 댓글

관련 채용 정보