PS/inflearn java coding2022. 4. 12. 22:26

class Main {

	static int m, n;			
	static int max = Integer.MIN_VALUE;
	public void DFS( int level, int sum, int[] arr) {
		// 합이 조건을 초과하면 return, 이전 flag와 유사 역할.
		if( sum > m) return;
        // 기존의 실수 : 모든 경우의 수를 보기 전에 리턴 시키려 함. 
        // 그럴 필요가 없는 것이, LEVEL이 n이 되는 경우 안에 요소의 포함/미포함 경우의 수가 모두 존재함.
        // 따라서 해당 경우에 값을 찾는 것이 낫다.
		if( level == n) {
			//System.out.println(String.format("level : %d sum: %d",level, sum));			
			max = Math.max(max, sum);						
		} else {			
			DFS(level+1, sum + arr[level] , arr);
			DFS(level+1, sum, arr);			
		}
	}
	
	public static void main(String args[]) throws Exception {
		Main M = new Main();
		Scanner in = new Scanner(System.in);		
		m = in.nextInt();
		n = in.nextInt();
		
		int [] arr = new int[n];
		for ( int i = 0 ; i < n ; ++i) {
			arr[i] = in.nextInt();	
		}
		
		M.DFS(0, 0, arr);		
		System.out.println(max);
	}
}

ex)
input
259 5
81
58
42
33
61

output 
242
Posted by easy16