티스토리 뷰


여태 삼성 문제 4개를 풀었는데 4개 모두다 DFS문제다 삼성은 DFS를 정말 좋아하는듯


문제 풀이


먼저 1일에 있는 스케쥴을 선택한 경우 5일이 걸리므로 6일 부터 10일 사이에 있는 스케쥴을 그다음 스케쥴로 고를 수 있다.

고를 수 있는 스케쥴의 모든 경우의 수 를 살펴보자.

1일,6일,7일 -> 80

1일,6일,8일 -> 90

2,6,7일 -> 70

2,6,8->80

3,6,7->60

3,6,8->70

4,6,7,->50

4,6,8->60

5,6,7->40

5,6,8->50

6,7,8->30

7 -> 20

8 -> 30


위의 경우를 빼고는 스케쥴을 선택 할 수 없고 이 모든 경우의 수 중에서 가장 큰 이익을 얻을수 있는건 1일 6일 8일에 있는 스케쥴을 선택해서 총 90의 가치를 얻는 것이다.


이런식으로 모든 경우의 수를 탐색해야 하는 문제는 DFS로 풀면 손쉽게 풀 수 있다.


소스코드 


#include <iostream>

#include <algorithm>

using namespace std;


int n;

int input[2][16];

int result;

int dp[16];


int DFS(int index){

    if(index+input[0][index] >= n+2) return 0;


    int rt = input[1][index];

    int MAX = 0;

    for(int i=index+input[0][index]; i<=n; i++)

    {

        MAX = max(MAX,DFS(i));

    }


    return MAX+rt;

}



int main(){

    cin>>n;

    for(int i=1; i<=n; i++)

        for(int j=0; j<2; j++)

            cin>>input[j][i];


    int maxx = 0 ;

    for(int i=1; i<=n; i++)

        maxx = max(maxx,DFS(i));

    

    cout << maxx <<endl;


    return 0;

}


댓글
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/04   »
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
글 보관함