https://www.acmicpc.net/problem/18427
λ¬Έμ
1λ²λΆν° Nλ²κΉμ§μ νμλ€μ κ°κ° λΈλ‘λ€μ κ°μ§κ³ μλ€. νμλ§λ€ μ΅λ Mκ°μ λΈλ‘μ κ°μ§κ³ μμ μ μμΌλ©°, ν λͺ μ νμμ΄ κ°μ§κ³ μλ λͺ¨λ λΈλ‘λ€μ λμ΄λ μλ‘ λ€λ₯΄λ€. μ΄ λ 1λ²λΆν° Nλ²κΉμ§μ νμλ€μ΄ κ°μ§ λΈλ‘μ μ°¨λ‘λλ‘ μ¬μ©νμ¬ λ°λ₯μμλΆν° μμμ¬λ € νλμ νμ λ§λ€κ³ μ νλ€.
λ¨, μ΄λ€ νμμ λΈλ‘μ μ¬μ©νμ§ μμλ λλ©° ν νμλΉ μ΅λ 1κ°μ λΈλ‘λ§μ μ¬μ©ν μ μλ€.
1λ²λΆν° Nλ²κΉμ§μ νμλ€μ΄ κ°μ§κ³ μλ λΈλ‘λ€μ λν μ λ³΄κ° μ£Όμ΄μ‘μ λ, λμ΄κ° μ νν HμΈ νμ λ§λ€ μ μλ κ²½μ°μ μλ₯Ό κ³μ°νλ νλ‘κ·Έλ¨μ μμ±νμμ€.
μλ₯Ό λ€μ΄ N=3, M=3, H=5μΌ λ, κ° νμλ§λ€ κ°μ§κ³ μλ λΈλ‘λ€μ λμ΄κ° λ€μκ³Ό κ°λ€κ³ κ°μ νμ.
- 1λ² νμ: 2, 3, 5
- 2λ² νμ: 3, 5
- 3λ² νμ: 1, 2, 3
μ΄ λ, νμ λμ΄κ° μ νν 5κ° λλλ‘ λΈλ‘μ μλ κ²½μ°λ‘λ λ€μμ 6κ°μ§κ° μ‘΄μ¬νλ€. (λΈλ‘μ μ¬μ©νμ§ μλ κ²½μ°λ Xλ‘ νμνμλ€.)
μ λ ₯
첫째 μ€μ μμ°μ N, M, Hκ° κ³΅λ°±μ κΈ°μ€μΌλ‘ ꡬλΆλμ΄ μ£Όμ΄μ§λ€. (1 ≤ N ≤ 50, 1 ≤ M ≤ 10, 1 ≤ H ≤ 1,000) λμ§Έ μ€λΆν° Nκ°μ μ€μ κ±Έμ³μ κ° νμμ΄ κ°μ§ λΈλ‘λ€μ λμ΄κ° 곡백μ κΈ°μ€μΌλ‘ ꡬλΆλμ΄ μ£Όμ΄μ§λ€.
λ¨, λͺ¨λ λΈλ‘μ λμ΄λ 1,000 μ΄νμ μμ°μμ΄λ©° ν λͺ μ νμμ΄ κ°μ§κ³ μλ λͺ¨λ λΈλ‘λ€μ λμ΄λ μλ‘ λ€λ₯΄κ² μ£Όμ΄μ§λ€.
μΆλ ₯
첫째 μ€μ λμ΄κ° HμΈ νμ λ§λλ κ²½μ°μ μλ₯Ό 10,007λ‘ λλ λλ¨Έμ§λ₯Ό μΆλ ₯νλ€.
νμ΄
DPλ¬Έμ μ΄λ€... (μ νμ...γ±.... μ΄...γΉ..γ γ΄)
DP[i][j] λ i λͺ μ νμλ€μ΄ j λμ΄μ νμ μμ μ μλ κ²½μ°μ μλ₯Ό μλ―Ένλ€.
μ°μ j = 0μ λͺ¨λ i μ λν΄μ 1μ΄λ€. νμλ€μ΄ λͺ¨λ λΈλ‘μ μ¬μ©νμ§ μλ κ²½μ° βΌοΈ λ± νλ βΌοΈ
DP[i][j] λ λ κ°μ§ κ²½μ°κ° μλ€.
- i λ²μ§Έ νμμ΄ μμ μ k λ²μ§Έ λΈλ‘μ μ¬μ©νλ κ²½μ°
- i λ²μ§Έ νμμ΄ μμ μ λΈλ‘μ μ¬μ©νμ§ μλ κ²½μ°
첫 λ²μ§Έ κ²½μ°λ i - 1λ² νμκΉμ§ j - block[i][k] λμ΄μ νμ μμ κ²½μ°μ΄λ€. μ¦, DP[i - 1][j - studentsHas[k]]
λ λ²μ§Έ κ²½μ°λ i - 1λ² νμκΉμ§ j λμ΄μ νμ μμ κ²½μ°μ΄λ€. μ¦, DP[i - 1][j]
μ½λ
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
import java.util.StringTokenizer;
public class Main_BOJ_18427_ν¨κ»λΈλ‘μκΈ° {
static final int mod = 10007;
static int N, M, H;
static int[][] DP;
static List<Integer>[] studentsHas;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer stringTokenizer = new StringTokenizer(br.readLine());
N = Integer.parseInt(stringTokenizer.nextToken());
M = Integer.parseInt(stringTokenizer.nextToken());
H = Integer.parseInt(stringTokenizer.nextToken());
DP = new int[N+1][H+1];
DP[0][0] = 1;
studentsHas = new ArrayList[N+1];
for(int i = 0 ; i < N+1 ; i++){
studentsHas[i] = new ArrayList<>();
}
for(int i = 1 ; i <= N ;i++){
stringTokenizer = new StringTokenizer(br.readLine());
while(stringTokenizer.hasMoreTokens()){
int block = Integer.parseInt(stringTokenizer.nextToken());
studentsHas[i].add(block);
}
}
for(int i = 1; i <= N ; i++){
DP[i][0] = 1;
for(int j = 1 ; j <= H ;j++){
for(int k = 0 ; k < studentsHas[i].size() ; k++){
if(j - studentsHas[i].get(k) < 0)
continue;
// iλ²μ§Έ νμμ΄ νλμ λΈλ‘ (kλ²μ§Έ λΈλ‘)μ μ ννλ κ²½μ°
DP[i][j] += DP[i-1][j-studentsHas[i].get(k)];
}
// iλ²μ§Έ νμμ΄ λΈλ‘μ μ¬μ©νμ§ μλ κ²½μ°
DP[i][j] += DP[i-1][j];
DP[i][j] %= mod;
}
}
System.out.println(DP[N][H]);
}
}
'μκ³ λ¦¬μ¦ > λ°±μ€' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[λ°±μ€ / BOJ 12871] 무ν λ¬Έμμ΄ (0) | 2021.09.14 |
---|---|
[λ°±μ€ / BOJ 17406] λ°°μ΄ λ리기 4 (0) | 2021.09.14 |
[λ°±μ€ / BOJ 2109] μνκ°μ° (0) | 2021.09.14 |
[λ°±μ€ / BOJ 2026] μν (0) | 2021.09.14 |
[λ°±μ€ / BOJ 20056] λ§λ²μ¬ μμ΄μ νμ΄μ΄λ³Ό (0) | 2021.09.14 |