티스토리 뷰
1) 생각
주어진 칼로리의 값을 넘지 않도록 더해가면서 맛의 만족도가 최대가 되는 값을 구하자. 재료의 수가 최대 20개로 많지 않으므로 주어진 시간인 Java 8초를 생각하면 모든 조건을 따져봐돠 충분히 풀 수 있을것이다.
2) 방안
재귀를 통한 DFS 방식을 통해 쭉욱 살펴보면서 그 값이 더해졌을 경우, 더해지지 않았을 경우를 따지면 된다.
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 31 32 33 34 35 36 37 38 39 40 41 42 43 | import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.Arrays; import java.util.StringTokenizer; public class Solution { static int n,l; static int[] score, kalory; public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int tc = Integer.parseInt(br.readLine()); for(int i=1;i<=tc;i++) { StringTokenizer st = new StringTokenizer(br.readLine()); n = Integer.parseInt(st.nextToken()); l = Integer.parseInt(st.nextToken()); score = new int[n]; kalory = new int[n]; for(int j=0;j<n;j++) { st = new StringTokenizer(br.readLine()); score[j] = Integer.parseInt(st.nextToken()); kalory[j] = Integer.parseInt(st.nextToken()); } maxScore = 0; check = new boolean[n]; dfs(0,0,0); System.out.println("#"+i+" "+maxScore); } } static int maxScore; static boolean[] check; private static void dfs(int idx,int s,int k) { if(k>l) return; if(idx==n) { maxScore = Math.max(maxScore, s); return; } dfs(idx+1,s+score[idx],k+kalory[idx]); dfs(idx+1,s,k); } } | cs |
'알고리즘 > SW Expert' 카테고리의 다른 글
[SW Expert] 4751. 다솔이의 다이아몬드 장식 (0) | 2018.08.23 |
---|---|
[SW Expert] 4789. 성공적인 공연 기획 (0) | 2018.08.23 |
[SW Expert] 5162. 두가지 빵의 딜레마 (0) | 2018.08.23 |
[SW Expert] 1206. [S/W 문제해결 기본] 1일차 - View (0) | 2018.08.22 |
[SW Expert] 3143. 가장 빠른 문자열 타이핑 (0) | 2018.08.19 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday