https://www.acmicpc.net/problem/1633
1633번: 최고의 팀 만들기
문제 꿍 협회는 매년 세계체스대회에 나갈 팀을 만들고 있다. 팀은 흑으로 플레이하는 15명과 백으로 플레이하는 15명, 총 30명으로 이루어진다. 꿍 협회는 가능한 최고의 팀을 만들려고 하는데 ��
www.acmicpc.net
전형적인 동적계획법 문제.
재귀함수와 메모이제이션을 이용해서 문제를 풀었다.
#include <stdio.h>
#include <memory.h>
#include <algorithm>
using namespace std;
FILE* in = fopen("input.txt", "r");
int white[1001];
int black[1001];
int cache[1001][16][16];
int n;
int dp(int w, int b, int now) {
if (now == n)
return 0;
if (cache[now][w][b] != -1)
return cache[now][w][b];
int ret = 0;
if (w > 0)
ret = max(ret, dp(w - 1, b, now + 1) + white[now]);
if (b > 0)
ret = max(ret, dp(w, b - 1, now + 1) + black[now]);
ret = max(ret, dp(w, b, now + 1));
return cache[now][w][b] = ret;
}
int main() {
int tmp_w; int tmp_b;
memset(cache, -1, sizeof(cache));
while (fscanf(in, "%d %d", &tmp_w, &tmp_b) > 0)
{
white[n] = tmp_w; black[n] = tmp_b;
n++;
}
printf("%d", dp(15, 15, 0));
return 0;
}
'알고리즘 > 백준' 카테고리의 다른 글
백준 2240번 자두나무 C/C++ 풀이 (0) | 2020.08.17 |
---|---|
백준 5557번 1학년 C/C++ 풀이 (0) | 2020.08.17 |
백준 14502번 연구소 C/C++ 풀이 (0) | 2020.08.15 |
백준 14501번 퇴사 C/C++ 풀이 (0) | 2020.08.13 |
백준 13460번 구슬 탈출 2 C/C++ 풀이 (0) | 2020.08.13 |