티스토리 뷰
#include <iostream>
#include <vector>
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
using namespace std;
int ch[100], n, sum=0, res=-2147000000;
vector<int> map[20];
vector<int> T;
vector<int> P;
void DFS(int L, int sum) {
if(L==n+1) {
if(sum>res){
res=sum;
}
}
else {
if(L+T[L]<=n+1) DFS(L+T[L], sum+P[L]);
else DFS(L+1, sum);
}
}
int main() {
freopen("input.txt", "rt", stdin);
int a, b;
scanf("%d", &n);
T.push_back(0);
P.push_back(0);
for(int i=1; i<=n; i++){
scanf("%d %d", &a, &b);
T.push_back(a);
P.push_back(b);
}
DFS(1, 0);
printf("%d\n", res);
return 0;
}
DFS를 활용해서 선택된 L의 합을 구한 후 그중 최소값을 구하는 문제이다.
이전 최소비용 문제와 비슷한 문제이나 다른 점은 본 문제는 앞으로 전진만 하기 때문에
for문을 통해서 처음부터 다시 점검하면서 DFS를 진행하지 않아도 된다.
반면에 최소비용 문제는 각각의 노드가 연결되어 있고 앞으로만 전진하고 있지 않기 때문에
for문을 통해 ch배열에 체크를 해주어야 한다.
- 최소비용 문제
내가 처음 DFS문제를 접할 때 먼저 생각하는 것은 DFS가 받는 파라미터인데
지금까지는 L로 받고 레벨단위로 구성해서 해당 레벨에서 더 가지를 뻗어나갈 수 있는 경우의 수를
for문을 통해 점검했었다. 그러면서 이전레벨에서 이미 지나온 수는 ch배열에 체크를 하고
다시 가지 못하게 만들었는데
이 문제에서는 T배열에 입력된 수만큼 앞으로만 전진하면서 마지막에 L이 n+1이 되는지만 확인하면 되므로
체크를 할 필요가 없다. 따라서 DFS의 if else 구문의 else부분에서 먼저 L+T[L] 이 n+1을 넘지 않는지 먼저 체크한 후 넘지 않는다면 다음 위치로 옮겨가는 작업을 한다.
만약 L+T[L] 이 n+1을 넘는다면 선택되지 않고 한칸만 움직인 위치에서 다시 체크를 시작한다.
'lecture > algorithm - c++' 카테고리의 다른 글
[c++] 피자배달거리(DFS활용) (0) | 2021.01.24 |
---|---|
[c++] 복면산 SEND+MORE=MONEY (0) | 2021.01.24 |
[c++] 순열구하기(DFS: Depth First Search) (0) | 2021.01.22 |
[c++] 원더랜드(Kruskal MST, Prim MST 알고리즘) (0) | 2021.01.17 |
[c++] 이항계수(메모이제이션), 친구인가(Union&Find 자료구조) (0) | 2021.01.16 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 배열
- 소프트웨어
- react
- C
- 교착상태
- 알고리즘
- stackframe
- 세마포어
- 입출력장치
- 최단경로
- 구조체
- 병행프로세스
- 재귀함수
- 이진탐색
- 운영체제
- dfs
- 자료구조
- 동적프로그래밍
- Java
- BFS
- 인접행렬
- server side rendering
- javascript
- 스텍
- Stack
- 인접리스트
- client side rendering
- 퀵정렬
- 클래스
- C++
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함