π [λ°±μ€μκ³ λ¦¬μ¦ νμ΄] Q.2293 λμ 1 λ¬Έμ νμ΄ - java
π λ¬Έμ
https://www.acmicpc.net/problem/2293
nκ°μ§ μ’ λ₯μ λμ μ΄ μλ€. κ°κ°μ λμ μ΄ λνλ΄λ κ°μΉλ λ€λ₯΄λ€. μ΄ λμ μ μ λΉν μ¬μ©ν΄μ, κ·Έ κ°μΉμ ν©μ΄ kμμ΄ λλλ‘ νκ³ μΆλ€.
κ·Έ κ²½μ°μ μλ₯Ό ꡬνμμ€. κ°κ°μ λμ μ λͺ κ°λΌλ μ¬μ©ν μ μλ€.
μ¬μ©ν λμ μ ꡬμ±μ΄ κ°μλ°, μμλ§ λ€λ₯Έ κ²μ κ°μ κ²½μ°μ΄λ€.
π μ κ·Όλ²
λμ λ¬Έμ μ λλ€.
λμ λ¬Έμ λ 그리λ μ νμΌλ‘λ μ κ·Όν μ μμ΅λλ€.
νμ§λ§,
μ΄λ² λμ 1 λ¬Έμ κ°μ κ²½μ°μλ
μ£Όμ΄μ§λ λμ μ κ°μΉκ° λ°°μ κ΄κ³λ‘ μ΄λ€μ§μ§ μκ³
λͺ¨λ μμλ‘ μ£Όμ΄μ§κΈ° λλ¬Έμ 그리λ μκ³ λ¦¬μ¦μΌλ‘ νμ΄νκΈ°μ μλ§μ§ μμ΅λλ€.
λμ λμ νλ‘κ·Έλλ° λ°©μμΌλ‘ νμ΄ ν μ μμ΅λλ€.
λμ μ κ°μλ 무νμ μΌλ‘ μ¬μ©μ΄ κ°λ₯νλ
κ° λμ μΌλ‘ λ§λ€ μ μλ λͺ¨λ κ²½μ°μ μλ₯Ό λμ νλ‘κ·Έλλ°μ ν΅ν΄ μλ§κ² ꡬν μ μμ΅λλ€.
1μλΆν° iμκΉμ§ κ° λμ μΌλ‘ λ§λ€ μ μλ κ²½μ°μ λν μ νμμ
dp[i] = d[i-coin]+1 μ
λλ€.
iμ κΉμ§μ λͺ¨λ κ²½μ°μ μ = (i-coin)μ κΉμ§μ λͺ¨λ κ²½μ°μ μ + 1 μ λλ€.
i-coinμμμ coin λμ μ λν΄ iμμ λ§λ€ μ μκΈ° λλ¬Έμ λλ€.
μ΄λ₯Ό μ΄μ©ν΄ nκ°μ λμ μΌλ‘ κ°κ°μ λμ μ λν΄ iμμ λ§λ€ μ μλ κ²½μ°λ₯Ό λν΄λκ°λ©΄ λ΅μ ꡬν μ μμ΅λλ€.
for (int j = coin[i]; j <= k; j++)
λν κ° λμ μ λν λ°λ³΅λ¬Έμ μ ν λ λμ κ°μΉλΆν° μμνμ¬ μ€λ³΅μ λ°©μ§ ν μ μμ΅λλ€.
π» μ½λ
package problem.dynamic;
import java.io.*;
public class Main_2293 {
static int n;
static int k;
static int dp[];
static int coin[];
public static void main(String[] args) throws IOException {
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
input();
solve();
bw.flush();
bw.close();
}
public static void input() throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String input[] = br.readLine().split(" ");
n = Integer.parseInt(input[0]);
k = Integer.parseInt(input[1]);
coin = new int[n];
dp = new int[k+1];
for(int i=0; i<n; i++){
coin[i] = Integer.parseInt(br.readLine());
}
br.close();
}
public static void solve() {
dp[0] = 1;
for (int i = 0; i <n; i++) {
for (int j = coin[i]; j <= k; j++) {
dp[j] += dp[j-coin[i]];
}
}
System.out.println(dp[k]);
}
}