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

바둑이 승차

by hoshi03 2023. 8. 23.

철수는 그의 바둑이들을 데리고 시장에 가려고 한다. 그런데 그의 트럭은 C킬로그램 넘게 태울수가 없다.

철수는 C를 넘지 않으면서 그의 바둑이들을 가장 무겁게 태우고 싶다.

N마리의 바둑이와 각 바둑이의 무게 W가 주어지면, 철수가 트럭에 태울 수 있는 가장 무거운 무게를 구하는 프로그램을 작성하세요.

입력

첫 번째 줄에 자연수 C(1<=C<=100,000,000)와 N(1<=N<=30)이 주어집니다.

둘째 줄부터 N마리 바둑이의 무게가 주어진다.

출력

첫 번째 줄에 가장 무거운 무게를 출력한다.

 

입력                                   출력

259 5                                 242    
81
58
42
33
61

 

dfs를 이용해서 죽 더하면서 더한 값이 무게 제한을 넘지 않는 최대값인 것을 구하는 문제

 

부분집합 dfs 전 문제와 비슷하다

 

import java.util.*;


public class Main{
    static int total = 0;
    static int[] arr;

    static int max = Integer.MIN_VALUE, high;

    public void dfs(int v, int sum){
        if (sum > high) return;
        if( v == arr.length){
            if (sum > max && sum <= high) max = sum;
        }
        else {
            dfs(v+1, sum + arr[v]);
            dfs(v+1, sum);
        }
    }

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

        high = in.nextInt();
        int n = in.nextInt();
        arr = new int[n];
        for (int i =0; i< n; i++) {
            arr[i] = in.nextInt();
            total += arr[i];
        }

        T.dfs(0, 0);

        System.out.print(max);
    }
}

 

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

DFS 중복순열  (0) 2023.08.24
최대점수 구하기  (0) 2023.08.23
합이 같은 부분집합  (0) 2023.08.23
그래프 최단거리(BFS)  (0) 2023.08.18
경로 탐색(DFS, 인접리스트, ArrayList)  (0) 2023.08.17