16.1활동 선택 문제(activity selection problem)
-
f가 제일작은 f[0]을 선택한다. 이게 a0
-
이 앞의 f[0]보다 큰 s[i]를 선택한다. a1
-
반복
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | void RECURSIVE_ACTIVITY_SELECTOR(int s[], int f[], int k, int n, std::vector<int> &a) { int m = k + 1; while (m < n && s[m] < f[k]) { m = m + 1; } if (m < n) { a.push_back(m); RECURSIVE_ACTIVITY_SELECTOR(s,f,m,n,a); } return; } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | std::vector<int> GREEDY_ACTIVITY_SELECTOR(int s[], int f[],int n) { std::vector<int> A; A.push_back(1); int k = 1; for (int m = 2; m <= n; m++) { if (s[m] >= f[k]) { A.push_back(m); k = m; } } return A; } |