From 1fa2f15013e31934fabd9234697f4fc79c260fb4 Mon Sep 17 00:00:00 2001 From: lkhyun <102892446+lkhyun@users.noreply.github.com> Date: Mon, 17 Nov 2025 23:55:13 +0900 Subject: [PATCH] =?UTF-8?q?[20251117]=20BOJ=20/=20G4=20/=20=EC=84=9C?= =?UTF-8?q?=EC=9A=B8=EC=97=90=EC=84=9C=20=EA=B2=BD=EC=82=B0=EA=B9=8C?= =?UTF-8?q?=EC=A7=80=20/=20=EC=9D=B4=EA=B0=95=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...75\354\202\260\352\271\214\354\247\200.md" | 97 +++++++++++++++++++ 1 file changed, 97 insertions(+) create mode 100644 "lkhyun/202511/17 BOJ G4 \354\204\234\354\232\270\354\227\220\354\204\234 \352\262\275\354\202\260\352\271\214\354\247\200.md" diff --git "a/lkhyun/202511/17 BOJ G4 \354\204\234\354\232\270\354\227\220\354\204\234 \352\262\275\354\202\260\352\271\214\354\247\200.md" "b/lkhyun/202511/17 BOJ G4 \354\204\234\354\232\270\354\227\220\354\204\234 \352\262\275\354\202\260\352\271\214\354\247\200.md" new file mode 100644 index 00000000..80d29be5 --- /dev/null +++ "b/lkhyun/202511/17 BOJ G4 \354\204\234\354\232\270\354\227\220\354\204\234 \352\262\275\354\202\260\352\271\214\354\247\200.md" @@ -0,0 +1,97 @@ +```java +import java.util.*; +import java.io.*; + +public class Main { + static BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + static BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); + static StringTokenizer st; + static int N, K; + static int[] vehicleTime, vehiclePrice, walkTime, walkPrice; + static int[] dp; + static boolean[] impossible; + + public static void main(String[] args) throws Exception { + st = new StringTokenizer(br.readLine()); + N = Integer.parseInt(st.nextToken()); + K = Integer.parseInt(st.nextToken()); + + walkTime = new int[N + 1]; + walkPrice = new int[N + 1]; + vehicleTime = new int[N + 1]; + vehiclePrice = new int[N + 1]; + dp = new int[K + 1]; + impossible = new boolean[K + 1]; + + for (int i = 1; i <= N; i++) { + st = new StringTokenizer(br.readLine()); + walkTime[i] = Integer.parseInt(st.nextToken()); + walkPrice[i] = Integer.parseInt(st.nextToken()); + vehicleTime[i] = Integer.parseInt(st.nextToken()); + vehiclePrice[i] = Integer.parseInt(st.nextToken()); + } + + Arrays.fill(impossible, true); + + if (walkTime[1] <= K) { + dp[walkTime[1]] = walkPrice[1]; + impossible[walkTime[1]] = false; + } + if (vehicleTime[1] <= K) { + if (impossible[vehicleTime[1]]) { + dp[vehicleTime[1]] = vehiclePrice[1]; + impossible[vehicleTime[1]] = false; + } else { + dp[vehicleTime[1]] = Math.max(dp[vehicleTime[1]], vehiclePrice[1]); + } + } + + for (int i = 2; i <= N; i++) { + boolean[] nextImpossible = new boolean[K + 1]; + Arrays.fill(nextImpossible, true); + int[] nextDp = new int[K + 1]; + + for (int j = K; j >= 0; j--) { + if (impossible[j]) continue; + + if (j + walkTime[i] <= K) { + int nextTime = j + walkTime[i]; + int nextMoney = dp[j] + walkPrice[i]; + + if (nextImpossible[nextTime]) { + nextDp[nextTime] = nextMoney; + nextImpossible[nextTime] = false; + } else { + nextDp[nextTime] = Math.max(nextDp[nextTime], nextMoney); + } + } + + if (j + vehicleTime[i] <= K) { + int nextTime = j + vehicleTime[i]; + int nextMoney = dp[j] + vehiclePrice[i]; + + if (nextImpossible[nextTime]) { + nextDp[nextTime] = nextMoney; + nextImpossible[nextTime] = false; + } else { + nextDp[nextTime] = Math.max(nextDp[nextTime], nextMoney); + } + } + } + + dp = nextDp; + impossible = nextImpossible; + } + + int answer = 0; + for (int j = 0; j <= K; j++) { + if (!impossible[j]) { + answer = Math.max(answer, dp[j]); + } + } + + bw.write(answer + ""); + bw.close(); + } +} +```