(BOJ 12008 262144) 이게 DP? 이게 Sparse table? (패턴)
2021. 9. 17. 23:52
그냥 봐선 이게 DP인지 싶음.
그러나 뭔가 완전탐색 같은 방식은 N이 너무 커서 불가능 할 것 같고.
해답 코드가 있었는데, 주석이 하나도 없어서 그냥 봐선 이해가 힘들었다.
→ 무조건 손으로 직접 풀어보기. 손으로 풀고 시각화 하다보면 패턴이 보다 쉽게 찾아진다!




해석 후 다시 스스로 짜본 코드
D[i][num] : i번째에 num이 올 수 있는가? 만약 i~j번째 수를 합쳐서 num을 만들 수 있다면, j+1를 반환
(아니면 default 0)
점화식은, D[i][num]과, 이거 바로 뒤에 나타나는 똑같은 num이 있을 시 합쳐서 num+1을 만드는 과정에서 세워짐
(아래 왼쪽 그림 - TC 손으로 풀어보며 점화식 파악)
const int MAXN = 262145, MAXX = 61; int D[MAXN][MAXX]; void solve() { int N, num; cin >> N; FOReq(i, 1, N) { cin >> num; D[i][num] = i; } int ans = 0; FOR(num, 1, 60) FOReq(i, 1, N) { int last_idx = D[i][num]; if (last_idx > 0) { ans = num; if (last_idx < N) D[i][num + 1] = D[last_idx + 1][num]; } } cout << ans; }
Sparse table 풀이
혼자서라면 지금 레벨론 절대 찾지 못했을 듯.
https://justicehui.github.io/usaco/2020/03/11/BOJ12008/
백준12008 262144
문제 링크 http://icpc.me/12008
justicehui.github.io
'<PS> > [복기 - BOJ]' 카테고리의 다른 글
(BOJ12869 - 뮤탈리스크) k진수 memo (0) | 2021.09.22 |
---|---|
(BOJ 1800 인터넷 설치) 최적화 문제 → 결정문제, 이분법 (0) | 2021.08.12 |
(BOJ 16639 괄호 추가하기 3) 완전 탐색을 가장한 DP (0) | 2021.08.05 |
(BOJ 2933 미네랄) Union-Find 활용 + 중력 (0) | 2021.08.02 |
(BOJ 2650 교차점개수) 주어진 문제 변형 (단순화) & 수식화 전략 (0) | 2021.05.17 |