-
[Algo RhythmπΊπ] BOJ 17528. Two MachinesAlgo RhythmπΊπ/BOJ 2020. 8. 26. 21:06
π λ¬Έμ μ€λͺ
μ€μΌμ€λ§ μ΅μ ν νμ¬μΈ SOPT μ μλ£ν΄μΌ ν nκ°μ μμ t1, t2, ..., tn μ΄ μλ€. SOPT νμ¬λ λ λμ λ¨Έμ A μ B λ₯Ό 보μ νκ³ μλ€. κ° μμ tiλ₯Ό μλ£νκΈ° μν΄ SOPT λ λ¨Έμ A μ B λ μ€μ μ€μ§ νλλ₯Ό μ νν μ μλ€. μμ tiλ₯Ό μλ£νκΈ° μν΄ λ¨Έμ Aλ₯Ό μ ννλ©΄ aiμκ°μ΄ κ±Έλ¦¬κ³ λ¨Έμ Bλ₯Ό μ ννλ©΄ bi μκ°μ΄ κ±Έλ¦°λ€. κ° λ¨Έμ μ μ΄λ μκ°μ μ΅λ νλμ μμ λ§ μνν μ μμΌλ©°, ν μμ μ΄ μμλλ©΄ κ·Έ μμ μ μλ£νκΈ° μ κΉμ§ λ€λ₯Έ μμ μ κ·Έ λ¨Έμ μμ μνν μ μλ€. SOPT λ λͺ¨λ μμ μ μλ£νκΈ° μν μ΅μμ μλ£ μκ°μ ꡬνκ³ μ νλ€.
μλ₯Ό λ€μ΄, μΈ κ°μ μμ μ΄ t1, t2, t3κ° μ£Όμ΄μ Έ μκ³ a1 = 2, b1 = 3, a2 = 5, b2 = 3, a3 = 2, b3 = 7λΌκ³ νμ. μλ£ μκ°μ μ΅μννκΈ° μν΄μλ μμ t1, t3λ λ¨Έμ Aμ, μμ t2λ λ¨Έμ Bμ ν λΉνλ€. λ¨Έμ Aλ μμ t1, t3λ₯Ό μλ£νλλ° 2 + 2 = 4 μκ°μ΄ κ±Έλ¦¬κ³ λ¨Έμ Bλ μμ t2λ₯Ό μλ£νλλ° 3 μκ°μ΄ κ±Έλ¦°λ€. λ°λΌμ μ΅μ μλ£ μκ°μ 4 μκ°μ΄ λλ€. nκ°μ μμ t1, t2, ..., tn κ³Ό κ° λ¨Έμ μμ κ° μμ λ€μ μννλ λ° κ±Έλ¦¬λ μκ°λ€μ΄ μ£Όμ΄μ§ λ, λͺ¨λ μμ λ€μ μλ£νκΈ° μν΄ κ±Έλ¦¬λ μκ°μ μ΅μκ°μ ꡬνλ νλ‘κ·Έλ¨μ μμ±νμμ€.
μ λ ₯
μ λ ₯μ νμ€μ λ ₯μ μ¬μ©νλ€. 첫 λ²μ§Έ μ€μ μμ μ κ°μλ₯Ό λνλ΄λ μμ μ μ n (1 ≤ n ≤ 250)μ΄ μ£Όμ΄μ§λ€. λ€μ nκ°μ μ€μμ iλ²μ§Έ μ€μλ λ κ°μ μ μ ai, bi (1 ≤ ai, bi ≤ 250)κ° μ£Όμ΄μ§λ€. μ¬κΈ°μ aiμ biλ κ°κ° μμ tiλ₯Ό λ¨Έμ Aμ Bμμ μλ£νλλ° κ±Έλ¦¬λ μκ°μ΄λ€.μΆλ ₯
μΆλ ₯μ νμ€μΆλ ₯μ μ¬μ©νλ€. λͺ¨λ μμ t1, t2, ..., tnμ μλ£νκΈ° μν μ΅μμ μλ£μκ°μ ν μ€μ μΆλ ₯νλ€.π― μ΄λ»κ² νμλ
import java.util.Scanner; public class BOJ_17528 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); int[] a = new int[n + 1]; int[] b = new int[n + 1]; int[] ab = new int[n + 1]; int[][] dpA, dpB; int totalA = 0 , totalB = 0; int ans; // init for(int i = 1; i <= n; i++) { a[i] = sc.nextInt(); b[i] = sc.nextInt(); ab[i] = a[i] + b[i]; totalA += a[i]; totalB += b[i]; } sc.close(); dpA = new int[n + 1][totalA + 1]; dpB = new int[n + 1][totalB + 1]; // dpA for(int i = 1; i <= n; i++) { for(int j = 1; j <= totalA; j++) { if(ab[i] <= j) { dpA[i][j] = Math.max(dpA[i - 1][j], dpA[i - 1][j - ab[i]] + a[i]); } else { dpA[i][j] = dpA[i - 1][j]; } } } // dpB for(int i = 1; i <= n; i++) { for(int j = 1; j <= totalB; j++) { if(ab[i] <= j) { dpB[i][j] = Math.max(dpB[i - 1][j], dpB[i - 1][j - ab[i]] + b[i]); } else { dpB[i][j] = dpB[i - 1][j]; } } } ans = Math.min(totalA - dpA[n][totalA], totalB - dpB[n][totalB]); System.out.println(ans); } }
π§ μ μ λ κ² νμλ
μ¬μ€ μ΄ λ¬Έμ λ μλ λΈλ‘κ·Έμ λμμ λ°μμ ν΄κ²°νλ€.
https://sbrus1213.tistory.com/3#problemL
μ΄ λ¬Έμ λ₯Ό νκΈ° μ λ¨Όμ μκ°ν΄μΌ ν κ²μ "μμ μλ£ μκ°μ΄ μ΅μκ° λκΈ° μν΄μλ Aμ μν μκ°κ³Ό Bμ μν μκ°μ μ°¨μ΄κ° μ΅μκ° λμ΄μΌ νλ€"λ κ²μ΄λ€.
μ΄λ° κ²½μ° μ°λ¦¬λ λ€μκ³Ό κ°μ λ κ°μ§ μλ리μ€λ₯Ό μκ°ν μ μλ€.
μλλ¦¬μ€ 1 : Aμ μνμκ°μ΄ Bμ μνμκ°λ³΄λ€ ν¬κ±°λ κ°κ³ λμ μ°¨μ΄κ° μ΅μμΈ κ²½μ°
μλλ¦¬μ€ 2 : Bμ μνμκ°μ΄ Aμ μνμκ°λ³΄λ€ ν¬κ±°λ κ°κ³ λμ μ°¨μ΄κ° μ΅μμΈ κ²½μ°μ²«λ²μ§Έ μλ리μ€μ κ²½μ° μμ μλ£ μκ°μ Aμ μν μκ°κ³Ό κ°κ³ λλ²μ§Έ μλ리μ€μ κ²½μ° Bμ μν μκ°κ³Ό κ°μ κ²μ΄λ€. μ¬κΈ°μ μ°λ¦¬λ 첫λ²μ§Έ μλ리μ€μ κ²½μ°μλ Aμ μνμκ°λ§, λλ²μ§Έ μλ리μ€μ κ²½μ°μλ Bμ μνμκ°λ§ μ€μνλ€λ μ¬μ€μ μ μ μλ€.
μ¬κΈ°κΉμ§ λλ¬νμΌλ©΄ μλ리μ€λ₯Ό 보λ κ΄μ μ μ‘°κΈ λ°κΎΈλ κ²μ΄ μ΄λ¨κΉ?
μλλ¦¬μ€ 1μ κ²½μ° λͺ¨λ μμ μ Aκ°, μλλ¦¬μ€ 2μ κ²½μ° λͺ¨λ μμ μ Bκ° μννλ€κ³ κ°μ ν΄λ³΄μ.
μλλ¦¬μ€ 1μ κ²½μ° Aμ μνμκ°μ΄ Bμ μνμκ°λ³΄λ€ ν¬κ±°λ κ°κ³ λμ μ°¨μ΄κ° μ΅μκ° λκΈ° μν΄μλ Aκ° λ΄λΉνκ³ μλ λͺ¨λ μμ λ€ μ€ μΌλΆλ₯Ό Bκ° μνν΄μΌ νλ€. μ΄ λ μ νν΄μΌ νλ μμ λ€μ "Bκ° μνν λ Aμ μνμκ°μ΄ κ°μ₯ λ§μ΄ κ°μνλ" μμ λ€μ΄μ΄μΌ νλ€. μ¦, κ°μ₯ λ§μ Aμ μν μκ°μ κ°μ Έμ€λ κ²μ΄ μ΅μ μ μμ μ΄λ€. κ·Έλ λ€λ©΄ μμ μλ£ μκ°μ ( λͺ¨λ μμ μ Aκ° μνν λ 걸리λ μκ° ) - ( κ°μμν¬ μ μλ A μνμκ°μ μ΅λκ° ) μ΄λ€. μλλ¦¬μ€ 2μ κ²½μ°λ λ°λλ‘ μκ°νλ©΄ λλ€.
μ¬κΈ°κΉμ§ μ€λ©΄ μ°λ¦¬λ μ΄ λ¬Έμ κ° 0-1 Knapsack problemκ³Ό λΉμ·ν λͺ¨μμλ₯Ό κ°μΆμλ€λ μ¬μ€μ μ μ μλ€. λ μμΈν λ§νλ©΄ μ΄ λ¬Έμ λ λ€μκ³Ό κ°μ΄ 0-1 Knapsack problemκ³Ό λμνλ€. (μλ μλ μλλ¦¬μ€ 1μ λ°νμΌλ‘ μμ±ν κ²μ΄λ€.)
( itemμ κ°μ ) = ( taskμ κ°μ )
( knapsackμ λ΄μ μ μλ λ¬΄κ² ) = ( Aκ° λͺ¨λ μμ μ λ΄λΉν λ 걸리λ μν μκ° )
( itemμ λ¬΄κ² ) = ( Aκ° iλ²μ§Έ taskλ₯Ό μνν λ 걸리λ μκ° + Bκ° iλ²μ§Έ taskλ₯Ό μνν λ 걸리λ μκ° )
( itemμ κ°μΉ ) = ( Aκ° iλ²μ§Έ taskλ₯Ό μνν λ 걸리λ μκ° )μ΄λ μ itemμ 무κ²κ° Aκ° iλ²μ§Έ taskλ₯Ό μνν λ 걸리λ μκ° + Bκ° iλ²μ§Έ taskλ₯Ό μνν λ 걸리λ μκ°μ λμνλμ§ μ§κ΄μ μΌλ‘ μ΄ν΄λμ§ μμ μλ μλ€ (λλ μ΄κ²μ΄ μ΄ν΄λμ§ μμ μ€λλμ ν€λ§Έλ€). μ΄μ λ κ°λ¨νλ€. ν μμ μ μ€νν λ 걸리λ Aμ μν μκ°μ κ°μμν¨λ€λ κ²μ κ°μ μμ μ μ€νν λ 걸리λ Bμ μν μκ°μ λλ¦°λ€λ λ§κ³Ό κ°λ€. κ·Έλ κΈ° λλ¬Έμ Aκ° λͺ¨λ μμ μ λ΄λΉν λ 걸리λ μν μκ° jλ ν μμ μ λ΄λΉν λ 걸리λ Aμ μνμκ°κ³Ό Bμ μνμκ°μ ν©λ³΄λ€ ν¬κ±°λ κ°μ λ iλ²μ§Έ μμ μ μνν λ 걸리λ Aλ‘ μνν λ 걸리λ μκ°μκ°μν μ§ λ§μ§(itemμ ν¬ν¨νμ§ λ§μ§)λ₯Ό κ²°μ ν μ μλ€.
μλλ¦¬μ€ 1, μλλ¦¬μ€ 2λ₯Ό κ°κ° 0-1 Knapsack problemμΌλ‘ ꡬνν΄μ κ° μλλ¦¬μ€ λ§λ€ μμ μλ£ μκ°μ ꡬν λ€ λ μ€ λ μμ κ²μ ꡬνλ©΄ κ·Έκ²μ΄ λ΅μ΄ λλ€.
π 무μμ λ°°μ λ
μκ°νλ νμ κΈ°λ₯΄μ!
'Algo RhythmπΊπ > BOJ' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[Algo RhythmπΊπ]BOJ 13458 - μνκ°λ (0) 2021.03.09 [Algo RhythmπΊπ] BOJ 16288. Passport Control (0) 2020.09.03 [Algo RhythmπΊπ] BOJ 17626. Four Squares (0) 2020.08.24 [Algo RhythmπΊπ] BOJ 17521. Byte coin (0) 2020.08.24 [Algo RhythmπΊπ] BOJ 17520. Balanced String (0) 2020.08.24