-
[10835] 카드게임BOJ 2021. 11. 6. 10:27
https://www.acmicpc.net/problem/10835
10835번: 카드게임
첫 줄에는 한 더미의 카드의 개수를 나타내는 자연수 N(1 ≤ N ≤ 2,000)이 주어진다. 다음 줄에는 왼쪽 더미의 카드에 적힌 정수 A(1 ≤ A ≤ 2,000)가 카드 순서대로 N개 주어진다. 그 다음 줄에는 오
www.acmicpc.net
<문제>
대소관계에 의해서 분기는 총 3가지로 갈라진다. O(N^2)의 탑다운dp로 구현했으며,
하나의 상태는 왼쪽 카드 더미와 오른쪽 카드 더미를 각각 몇개사용했는지로 구분된다.
<소스코드>
1234567891011121314151617181920#include <bits/stdc++.h>using namespace std;int n, a[2001], b[2001], dp[2001][2001];int f(int l, int r) {if (l == n || r == n) return 0;if (dp[l][r] != -1) return dp[l][r];if (a[l] > b[r]) dp[l][r] = max(b[r] + f(l, r + 1), dp[l][r]);dp[l][r] = max({f(l + 1, r), f(l + 1, r + 1), dp[l][r]});return dp[l][r];}int main(void) {memset(dp, -1, sizeof(dp));cin >> n;int i;for (i = 0; i < n; i++) cin >> a[i];for (i = 0; i < n; i++) cin >> b[i];cout << f(0, 0);return 0;}cs 'BOJ' 카테고리의 다른 글
[4781] 사탕 가게 (0) 2021.11.07 [18405] 경쟁적 전염 (0) 2021.11.06 [2234] 성곽 (0) 2021.11.05 [15686] 치킨 배달 (0) 2021.11.05 [1992] 쿼드트리 (0) 2021.11.04