와이유스토리

[DP(Top-Down)] 백준 10835 카드게임 C++ 본문

코딩테스트/동적계획법

[DP(Top-Down)] 백준 10835 카드게임 C++

유(YOO) 2023. 9. 4. 16:26

10835번: 카드게임 (acmicpc.net)

 

10835번: 카드게임

첫 줄에는 한 더미의 카드의 개수를 나타내는 자연수 N(1 ≤ N ≤ 2,000)이 주어진다. 다음 줄에는 왼쪽 더미의 카드에 적힌 정수 A(1 ≤ A ≤ 2,000)가 카드 순서대로 N개 주어진다. 그 다음 줄에는 오

www.acmicpc.net

 

#include <iostream>
#include <vector>
#define N 2001

using namespace std;

int n;
vector<int> l(N, 0);
vector<int> r(N, 0);
int dp[N][N];

int func(int s, int e) {
    int& ret = dp[s][e];
    if (ret != -1) return ret;
    if ((s >= n) || (e >= n)) return 0;

    ret = 0;
    if (l[s] > r[e]) ret = max(max(func(s+1, e), func(s+1, e+1)), func(s, e+1) + r[e]);
    else ret = max(func(s+1, e), func(s+1, e+1));

    return ret;
}

int main() {
    ios_base::sync_with_stdio(0);
    cin.tie(0), cout.tie(0);

    cin >> n;

    for(int i=0; i<n; i++) cin >> l[i];
    for(int i=0; i<n; i++) cin >> r[i];

    fill(&dp[0][0], &dp[N-1][N], -1);
    cout << func(0, 0);

    return 0;
}
Comments