본문 바로가기
알고리즘 이전/재귀, DFS, BFS, Tree, Graph

최대점수 구하기

by hoshi03 2023. 8. 23.

현수는 선생님이 주신 N개의 문제를 풀려고 합니다.

각 문제는 그것을 풀었을 때 얻는 점수와 푸는데 걸리는 시간이 주어지게 됩니다.

제한시간 M안에 N개의 문제 중 최대점수를 얻을 수 있도록 해야 합니다.

(해당문제는 해당시간이 걸리면 푸는 걸로 간주한다, 한 유형당 한개만 풀 수 있습니다.)

 

입력                 출력

5 20                  41
10 5
25 12
15 8
6 3
7 4

 

전, 전전문제와 비슷한 부분집합 합 구하기 문제, 조건에 시간제한도 더해주면서 bfs를 한다

 

import java.util.*;


public class Main{
    static int[] times, score;

    static int max = Integer.MIN_VALUE, timeLimit = 0;

    public void dfs(int v, int limit, int sum){
        if (limit > timeLimit) return;

        if( v == times.length){
            max = Math.max(max, sum);
        }

        else {
            dfs(v+1, limit + times[v], sum + score[v]);
            dfs(v+1, limit, sum);
        }
    }

    public static void main(String args[]) {
        Main T = new Main();
        Scanner in = new Scanner(System.in);

        int n = in.nextInt();
        timeLimit = in.nextInt();
        score = new int[n];
        times = new int[n];
        for (int i =0; i< n; i++) {
            score[i] = in.nextInt();
            times[i] = in.nextInt();
        }

        T.dfs(0, 0, 0);

        System.out.print(max);
    }
}

'알고리즘 이전 > 재귀, DFS, BFS, Tree, Graph' 카테고리의 다른 글

동전 교환  (0) 2023.08.24
DFS 중복순열  (0) 2023.08.24
바둑이 승차  (0) 2023.08.23
합이 같은 부분집합  (0) 2023.08.23
그래프 최단거리(BFS)  (0) 2023.08.18