728x90
반응형
1. 문제
https://www.acmicpc.net/problem/14501
2. 풀이과정
백준이가 상담을 잡을 수 있는 모든 경우에 대해 수익을 계산해 최대 수익을 구한다.
위와 같은 입력을 예로 들면
(1일, 4일, 5일)
(1일, 5일)
(2일)
(3일, 4일, 5일)
(3일, 5일)
.
.
와 같은 순서로 상담을 잡을 수 있는 모든 경우를 따져보면 된다.
[코드설명]
dfs함수는 상담을 잡을 수 있는 모든 경우에 대해 최대수익을 갱신해준다.
3. 코드
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int n;
vector<int> T, P;
bool visited[17];
int max_v = -1;
void dfs(int sum, int curr) {
if(curr && curr + T[curr] - 1 == n) {
max_v = max(max_v, sum);
return ;
}
if(curr && curr + T[curr] - 1 > n) {
max_v = max(max_v, sum-P[curr]);
return ;
}
int start = curr ? curr + T[curr] : 1;
for(int i=start; i<=n; i++) {
if(!visited[i]) {
visited[i] = true;
dfs(sum+P[i], i);
visited[i] = false;
}
}
}
int main() {
cin.tie(NULL);
ios::sync_with_stdio(false);
cin >> n;
T.resize(n+1);
P.resize(n+1);
for(int i=1; i<=n; i++) {
cin >> T[i] >> P[i];
}
dfs(0, 0);
cout << max_v;
return 0;
}
728x90
반응형
'💡 Problem Solving > Baekjoon' 카테고리의 다른 글
[백준 - 12101] 1, 2, 3 더하기 2 [C++] (1) | 2021.03.14 |
---|---|
[백준 - 14500] 테트로미노 [C++] (0) | 2021.03.06 |
[백준 - 15658] 연산자 끼워넣기 (2) [C++] (0) | 2021.01.26 |
[백준 - 15666] N과 M (12) [C++] (0) | 2021.01.26 |
[백준 - 15665] N과 M (11) (0) | 2021.01.26 |