백준 14728 - 벼락치기
Updated:
Java
14728 번 - 벼락치기
문제
접근 방법
Knapsack 알고리즘으로 해결하였다.
시간을 무게로, 점수를 금액으로 생각하여 품
코드
import java.util.*;
import java.io.*;
public class Main {
static int n, m, result;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer stk = new StringTokenizer(br.readLine());
n = stoi(stk.nextToken());
m = stoi(stk.nextToken());
int[][] dp = new int[n + 1][m + 1];
int[] time = new int[n + 1];
int[] score = new int[n + 1];
for(int i = 1; i <= n; i++) {
stk = new StringTokenizer(br.readLine());
time[i] = stoi(stk.nextToken());
score[i] = stoi(stk.nextToken());
}
int t, s;
// 과목 선택
for(int i = 1; i <= n; i++) {
// 시간이 흘러감
for(int j = 1; j <= m; j++) {
t = time[i];
s = score[i];
dp[i][j] = dp[i - 1][j]; // 현재 시간을 넣지 않았을 때
// 현재 시간이 해당 과목을 공부하기에 충분하면
if(j >= time[i]) {
dp[i][j] = Math.max(dp[i][j], dp[i - 1][j - t] + s);
}
}
}
System.out.println(dp[n][m]);
br.close();
}
static int stoi(String str) {
return Integer.parseInt(str);
}
}