반응형
https://www.acmicpc.net/problem/11062
문제 해결 알고리즘
근우는 더 큰 카드를 갖고 점수를 최대로 하고, 명우는 근우의 점수가 최소로 되는 방향으로 플레이 해야한다.
소스 코드
#include <bits/stdc++.h>
using namespace std;
int arr[1001], dp[1001][1001];
int cardgame(int left, int right, int turn){
if(left > right) return 0;
if(dp[left][right]) return dp[left][right];
if(turn % 2) return dp[left][right] = max(arr[left] + cardgame(left+1, right, turn+1),
arr[right] + cardgame(left, right-1, turn+1));
else return dp[left][right] = min(cardgame(left+1, right, turn+1),
cardgame(left, right-1, turn+1));
}
int main(){
int T; cin >> T;
while(T--){
int N; cin >> N;
for(int i=0;i<N;i++) cin >> arr[i];
cardgame(0, N-1, 1);
cout << dp[0][N-1] << '\n';
memset(dp, 0, sizeof(dp));
}
}
반응형
'알고리즘 문제 해결 > BOJ' 카테고리의 다른 글
[백트래킹] BOJ 1062 가르침 (C++) (0) | 2022.10.08 |
---|---|
[DP] BOJ 7579 앱 (C++) (0) | 2022.10.05 |
[DP] BOJ 5582 공통 부분 문자열 (C++) (0) | 2022.09.30 |
[DP] BOJ 1915 가장 큰 정사각형 (C++) (0) | 2022.09.27 |
[브루트 포스, 백 트래킹] BOJ 14500 테트로미노 (C++) (1) | 2022.09.24 |