반응형
문제 출처 :
https://www.acmicpc.net/problem/1633
알고리즘 분석 :
문제 해결에 필요한 사항
1. Dynamic Programming
2. 점화식 세우는 방법
재귀를 이용하면 쉽게 해결 할 수 있다.
선택안하는 경우, 백팀 선택하는 경우, 흑팀 선택하는 경우 3가지로 나누어 dp 재귀를 보내면 된다.
소스 코드 :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 | #include <iostream> #include <cstdio> #include <algorithm> #include <memory.h> using namespace std; int white[1002], black[1002]; int dp[1002][16][16]; int idx; int napsack(int w, int b, int now) { if (now == idx) return 0; int &ret = dp[now][w][b]; if (ret != -1) return ret; if (w > 0) ret = max(ret, napsack(w - 1, b, now + 1) + white[now]); if (b > 0) ret = max(ret, napsack(w, b - 1, now + 1) + black[now]); ret = max(ret, napsack(w, b, now + 1)); return ret; } int main() { memset(dp, -1, sizeof(dp)); int w, b; while (scanf("%d %d", &w, &b) != EOF) { white[idx] = w; black[idx++] = b; } cout << napsack(15, 15, 0) << endl; return 0; } // This source code Copyright belongs to Crocus // If you want to see more? click here >> | Crocus |
반응형
'Applied > 알고리즘 문제풀이' 카테고리의 다른 글
[3190번] 뱀 (0) | 2018.04.09 |
---|---|
[14502번] 연구소 (0) | 2018.04.06 |
[1613번] 역사 (0) | 2018.03.28 |
[14428번] 수열과 쿼리 16 (0) | 2018.03.25 |
[2422번] 한윤정이 이탈리아에가서 아이스크림을 사먹는데 (0) | 2018.03.23 |