olrlobt
[μλ°/λ°±μ€ κ³¨λ5] #2293 λμ 1 λ³Έλ¬Έ
https://www.acmicpc.net/problem/2293
π 골λ5 - #2293 λμ 1
π ν μ€νΈμΌμ΄μ€ μΆκ° ννΈ
4 10
1
2
5
3
= 20
βοΈ νμ΄λ²
λνμ μΈ DP λ¬Έμ μ΄λ€.
DP λ¬Έμ λ₯Ό ν λ, κ°μ₯ λ¨Όμ κ³ λ €ν΄μΌ ν κ²μ
μΊμ±μ ν΅ν μ νμ λμΆμ΄λ€.
μΊμ±μ μν΄ DP ν μ΄λΈμ κ·Έλ €λ³΄λ©΄,
κ°λ‘μΆμ Kμμ΄ λκΈ° μν κ°μΉλ₯Ό λμ΄ν μ μλ€.
κ·Έλ¦¬κ³ μΈλ‘μΆμ λμ μ νλμ© μΆκ°νλ©° λ¬Έμ λ₯Ό ν΄κ²°ν΄ 보μ.
λ¨Όμ 1μμ§λ¦¬ λμ μ μΆκ°νλ€.
1μμ§λ¦¬ λμ μΌλ‘ 1μμ λ§λ€λ, 2μμ λ§λ€λ, 3μμ λ§λ€λ... κ°μ λͺ¨λ 1μ΄ λλ―λ‘ 1λ‘ μ±μμ§κ² λλ€.
λν, 0μμ λ§λλ κ²½μ°λ { x } λμ μ μ ννμ§ μλ κ²½μ° 1κ°μ§λ‘ μκ°ν μ μλ€.
λ€μμΌλ‘ 2μμ§λ¦¬ λμ μ μΆκ°νλ€.
2μμ§λ¦¬ λμ κΉμ§λ μ½κ² μ§μ μΈμ΄λ³Ό μ μμΌλ―λ‘, μ±μ λκ³ μκ°ν΄ 보면,
2μμ λ§λ€κΈ° μν΄μλ (2) / (1+1) λ κ°μ§ κ²½μ°κ° μ‘΄μ¬νλ€.
3μμ λ§λ€κΈ° μν΄μλ (2+1) / (1+1+1) λ κ°μ§ κ²½μ°κ° μ‘΄μ¬νλ€
4μμ λ§λ€κΈ° μν΄μλ (2+2) / (2+1+1) / (1+1+1+1) μΈ κ°μ§ κ²½μ°κ° μ‘΄μ¬νκ³ ,
5μμ λ§λ€κΈ° μν΄μλ (2+2+1) / (2+1+1+1) / (1+1+1+1+1) μΈ κ°μ§ κ²½μ°κ° μ‘΄μ¬νλ€.
1μκ³Ό 2μ λμ λ§μΌλ‘λ μ νμμ μΈμ°κΈ° μ½μ§ μμΌλ―λ‘ λ€μ κ²½μ°λ₯Ό λ³Έλ€.
λ€μ 5μμ§λ¦¬ λμ μ μΆκ°ν΄ 보μ.
5μμ§λ¦¬ λμ μ΄ κ°μ λλ 건, 5μμ λ§λ€ λλΆν° μ΄λ€.
λ°λΌμ 1~4μμ λ§λλ κ°μ§μλ μ΄ μ μ κ°μ κ·Έλλ‘ κ°μ Έμμ μ±μ μ€λ€.
5μμ λ§λλ κ²½μ°μ μλ
5μμ§λ¦¬ λμ λ§μΌλ‘ λ§λλ κ²½μ° (5) ν κ°μ§μ
μ΄ μ κΉμ§μ λμ (1μκ³Ό 2μ) λ§μΌλ‘ λ§λλ κ²½μ° (2+2+1) / (2+1+1+1) / (1+1+1+1+1) μΈ κ°μ§λ₯Ό λν
4κ°μ§μ΄λ€.
μ΄ κ²μ,
5μμ ν¬ν¨νμ§ μλ κ²½μ° + 5μμ νλ μ΄μ ν¬ν¨νλ κ²½μ°λ‘ λλ μ μλλ°,
5μμ ν¬ν¨νμ§ μλ κ²½μ°λ
μ΄ μ κΉμ§μ λμ (1μκ³Ό 2μ) λ§μΌλ‘ λ§λλ κ²½μ°λ‘ 3κ°μ§μ΄κ³ ,
5μμ νλ μ΄μ ν¬ν¨νλ κ²½μ°λ
νλ μ΄μ ν¬ν¨λμ΄ μκΈ° λλ¬Έμ λ§λ€κ³ μ νλ λμμ 5μμ λΉΌ μ€ κ²½μ°μ μ
μ¦, λ§λ€κ³ μ νλ λ( 5 )μμ νμ¬ λμ μ λ¨μ ( 5μ )λ₯Ό λΊ ( 0)μ λ§λλ κ²½μ°μ΄λ©°,
μλ κ·Έλ¦Όμ²λΌ λνλΌ μ μλ€.
5μμ΄ μ€λ³΅λΌμ μ¬μ©λκΈ° λλ¬Έμ, 5λ₯Ό λΊ κ°μ μ΄ μ μΊμκ° μλ νμ¬ μΊμμμ μ°ΎμμΌ νλ€.
λ°λΌμ 3+1=4μ κ°μ΄ λμ¨λ€.
λ§μ°¬κ°μ§λ‘, 6μμ λ§λλ κ²½μ°μ μλ
μ΄ μ κΉμ§μ λμ (1μκ³Ό 2μ) 4κ°μ§μ
5μμ§λ¦¬ λμ μ μ¬μ©ν΄ λ§λλ κ²½μ° (5+1) ν κ°μ§.
μ¦, 5μμ΄ ν¬ν¨ μ λ κ²½μ° 4κ°μ§μ
5μμΌλ‘ 1μμ λ§λλ κ²½μ° 1κ°μ§λ₯Ό λνλ©΄ λλ€.
λ§μ°¬κ°μ§λ‘,
7μ = 4 + 2 = 6
8μ = 5 + 2 = 7
9μ = 5 + 3 = 8
λ§μ§λ§ 10μμ κ²½μ°,
5μμ μ¬μ©νμ§ μλ 6κ°μ§ κ²½μ°μ μμ
5μμ ν λ² μ΄μ μ¬μ©νλ κ²½μ°.
μ¦, 10 - 5 = 5 ( νλ² μ¬μ©νκΈ° λλ¬Έμ 5λ₯Ό λΉΌμ€λ€)
5λ₯Ό λ§λλ κ²½μ°μ μ (μ΄ κ²½μ°μλ 5κ° ν¬ν¨λ μ μλ€. λ°λΌμ) 4κ°μ§
6+4=10 μ΄ λλ€.
μ΄ν΄κ° κ°μ§ μλλ€λ©΄, ν μ€νΈμΌμ΄μ€ μΆκ° ννΈλ₯Ό 보며 μ κ³Όμ μ ν λ² λ μννκΈΈ κΆμ₯νλ€.
λ°λΌμ μ νμμ
μ΄μ°¨μ λ°°μ΄λ‘λ λ€μκ³Ό κ°μ΄ λνλΌ μ μκ³ ,
dp [ i ][ j ] = dp [ i-1 ][ j ] dp [ i ][ j - coin [ i ] ]
μΌμ°¨μ λ°°μ΄λ‘λ λ€μκ³Ό κ°μ΄ λνλΌ μ μλ€.
dp [ i ] += dp [ i - coin [ j ] ]
ποΈ JAVA νμ΄
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class baekjoon2293 {
static int K;
static int N;
static List<Integer> dp = new ArrayList<>();
static int[] P;
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
N = sc.nextInt();
K = sc.nextInt();
P = new int[N];
for (int testCase = 0; testCase < N; testCase++) {
P[testCase] = sc.nextInt();
}
solve();
}
public static void solve() {
dp.add(0);
for (int i = 0; i < K; i++) {
dp.add(0);
}
dp.set(0,1);
for (int index = 0; index < N; index++) {
for (int j = P[index]; j <= K; j++) {
dp.set(j, dp.get(j) + dp.get(j - P[index]));
}
}
System.out.println(dp.get(K));
}
}
'Algorithm > λ°±μ€' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[JAVA/λ°±μ€ κ³¨λ5] #2294 λμ 2 (0) | 2023.01.11 |
---|---|
[μλ°/λ°±μ€ κ³¨λ5] #12865 νλ²ν λ°°λ (0) | 2023.01.09 |
[μλ°/λ°±μ€ κ³¨λ5] #1461 λμκ΄ (1) | 2023.01.02 |
[μλ°/λ°±μ€ κ³¨λ5] #13164 ν볡 μ μΉμ (1) | 2023.01.01 |
[μλ°/λ°±μ€ κ³¨λ3] #13904 κ³Όμ (0) | 2022.12.31 |