[Code SASA] 숫자 카드 게임
2020. 5. 15. 00:27ㆍPS/Problem Solving
DP[s,e]를 s~e번째 카드를 보고 있을 때 얻을 수 있는 최대의 점수라 하자.
관계식은 간단하게 세울 수 있다.
DP(s,e) = max(arr[s]+sum[e]-sum[s]-DP(s+1,e),arr[e]+sum[e-1]-sum[s-1]-DP(s,e-1));
s,e는 1~n이고 n은 1e5까지 가능하기 떄문에 DP는 일반적인 방법으로 채울 수 없다.
최적화가 필요하다!
이 문제를 푸신 선배 "최성준" 님께 여쭈어봐서 유사한 문제를 알아냈다.
https://www.acmicpc.net/problem/11062
이 문제는 N의 제한이 1000이기 때문에 기존에 생각한 N^2풀이가 가능하다.
기존 풀이를 제출했을 때 92 ms 가량이 나왔는데, 4ms 로 푼 분이 있어 그분의 코드를 보고 공부했다.
핵심 아이디어는 동적 계획법 -> 그리디 변환이다.
728x90
'PS > Problem Solving' 카테고리의 다른 글
시험 끝나고 PS (1) | 2020.05.31 |
---|---|
[Code SASA] 정독실에서 tic-tac-toe (0) | 2020.05.23 |
Scheduling/스케줄링 알고리즘 (0) | 2020.04.09 |
Codeup/코드업 3180 간단한 문제 풀기 위해 공부 했던 것들 (1) | 2020.03.26 |
내가 보려고 만든 소인수분해 방법 정리글 (0) | 2020.02.26 |