설명

이번 정보올림피아드대회에서 좋은 성적을 내기 위하여 현수는 선생님이 주신 N개의 문제를 풀려고 합니다. 각 문제는 그것을 풀었을 때 얻는 점수와 푸는데 걸리는 시간이 주어지게 됩 니다. 제한시간 M안에 N개의 문제 중 최대점수를 얻을 수 있도록 해야 합니다. (해당문제는 해당시간이 걸리면 푸는 걸로 간주한다, 한 유형당 한개만 풀 수 있습니다.)

 

 

 

 

입출력

첫 번째 줄에 문제의 개수N(1<=N<=20)과 제한 시간 M(10<=M<=300)이 주어집니다. 두 번째 줄부터 N줄에 걸쳐 문제를 풀었을 때의 점수와 푸는데 걸리는 시간이 주어집니다.

 

첫 번째 줄에 제한 시간안에 얻을 수 있는 최대 점수를 출력합니다.

 

 

 

예시

5 20

10 5

25 12

15 8

6 3

7 4

 

41

 

풀이

1. 변수명 무조건 다르게 짓기, 배열 만들때 초기화하기

 

2. 고려할 사항이 많으면 각각 배열을 만들도록 하기

 

3. 최대점수,최대무게, 부분집합 => DFS로 풀기

import java.util.*;
class Main {
	static int n, m;
	static int[] score;
	static int[] time;
	static int max= 0;
	
	public void DFS(int L, int s, int t) {
		if(t>m) {
			return;
		}
		if(L==n) {
//			if(sum>max) {
//				max=sum;
//			}
			max=Math.max(max, s);
		}else {
			DFS(L+1, s+score[L], t+time[L]);
			DFS(L+1, s, t);
		}
	}
	
	
	public static void main(String[] args){
		Main T = new Main();
		Scanner kb = new Scanner(System.in);
		n=kb.nextInt();
		m=kb.nextInt();
		score= new int[n];
		time= new int[n];
		
		for(int i=0; i<n; i++){
			int a = kb.nextInt();
			int b = kb.nextInt();
			score[i]=a;
			time[i]=b;
		}
		T.DFS(0,0,0);
		System.out.println(max);
	}	
}

 

'알고리즘기초 > DFS,BFS활용' 카테고리의 다른 글

06. 순열  (0) 2022.09.29
05. 동전교환  (0) 2022.09.29
04. 중복순열  (0) 2022.09.29
02. 바둑이 승차(DFS)  (0) 2022.09.28
01. 합이 같은 부분집합(DFS)  (0) 2022.09.28

+ Recent posts