https://www.acmicpc.net/problem/2758
λ¬Έμ
μ μμ΄λ 맀주 μμ²λ λμ λ‘λμ ν¬μνλ€. μ μμ΄κ° νλ λ‘λλ 1λΆν° mκΉμ§ μ«μ μ€μ nκ°μ μλ₯Ό κ³ λ₯΄λ λ‘λμ΄λ€.
μ΄λ κ² μ΄μ¬ν λ‘λλ₯Ό νλλ°, μμ§κΉμ§ ν λ²λ λΉμ²¨λμ§ μμ μ΄μ λ μλ₯Ό κ³ λ₯Ό λ κ° μ«μλ μ΄μ μ κ³ λ₯Έ μλ³΄λ€ μ μ΄λ 2λ°°κ° λλλ‘ κ³ λ₯΄κΈ° λλ¬Έμ΄λ€.
μλ₯Ό λ€μ΄, n=4, m=10μΌ λ, μ μμ΄λ λ€μκ³Ό κ°μ΄ κ³ λ₯Ό μ μλ€.
- 1 2 4 8
- 1 2 4 9
- 1 2 4 10
- 1 2 5 10
λ°λΌμ μ μμ΄λ λ‘λλ₯Ό 4κ° μ°λ€.
μ μμ΄λ λμ΄ μμ²λκ² λ§κΈ° λλ¬Έμ, μλ₯Ό κ³ λ₯΄λ λ°©λ²μ μ λ§νΌ λ‘λλ₯Ό ꡬ맀νλ©°, κ°μ λ°©λ²μΌλ‘ 2μ₯μ΄μ ꡬ맀νμ§ μλλ€.
nκ³Ό mμ΄ μ£Όμ΄μ‘μ λ, μ μμ΄κ° ꡬ맀νλ λ‘λμ κ°μλ₯Ό μΆλ ₯νλ νλ‘κ·Έλ¨μ μμ±νμμ€
μ λ ₯
첫째 μ€μ ν μ€νΈ μΌμ΄μ€μ κ°μ Tκ° μ£Όμ΄μ§λ€. κ° ν μ€νΈ μΌμ΄μ€λ nκ³Ό mμΌλ‘ μ΄λ£¨μ΄μ Έ μλ€.
μΆλ ₯
κ° ν μ€νΈ μΌμ΄μ€μ λν΄ μ μμ΄κ° λ‘λλ₯Ό λͺ κ°λ ꡬ맀νλμ§ ν μ€μ νλμ© μΆλ ₯νλ€.
νμ΄
DFS λ‘ νμ΄λ³΄λ €νμΌλ γ ‘γ ‘;; λ©λͺ¨λ¦¬ μ΄κ³Όκ° λ°μ...π₯Ά
DP λ‘ ν΄κ²°ν΄μΌνλ λ¬Έμ μΈλ―........
1 2 6 κ³Ό 1 3 6 μ κ°μ΄ κ·Έ λ€μ μΌμΉνλ κ²½μ°λ€μ΄ λ§κΈ° λλ¬Έμ memorization ν΄μ£Όμ΄μΌνλλ―..
μΌμ~
μ½λ
1οΈβ£ DFSλ‘ νμ΄λ³΄λ €νμΌλ ... λ©!λͺ¨!리! μ΄!κ³Ό!
// DFS λ‘ νμ΄ μ λ©λͺ¨λ¦¬ μ΄κ³Ό λ°μ
static boolean[] isVisted;
static int n,m;
static long answer;
public static void main(String[] args) throws NumberFormatException, IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int T = Integer.parseInt(br.readLine());
while(T-- > 0){
String[] nm = br.readLine().split(" ");
n = Integer.parseInt(nm[0]);
m = Integer.parseInt(nm[1]);
answer = 0;
isVisted = new boolean[m+1];
for(int i = 1; i <= m; i++){
isVisted[i] = true;
DFS(i, 1, String.valueOf(i));
isVisted[i] = false;
}
System.out.println(answer);
}
}
private static void DFS(int now, int cnt, String str) {
if(cnt == n){
answer++;
return;
}
if(cnt > n)
return;
for(int i = now*2; i <= m ; i++){
if(!isVisted[i]){
isVisted[i] = true;
DFS(i*2, cnt+1, str+i);
isVisted[i] = false;
}
}
}
2οΈβ£ DPλ‘ ν΄κ²°βΌοΈ
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.StringTokenizer;
public class Main_BOJ_2758_λ‘λ {
// dpμ memorization μΌλ‘ ν΄κ²°ν΄μ£Όμ΄μΌν¨
public static void main(String[] args) throws NumberFormatException, IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int testCase = Integer.parseInt(br.readLine());
while(testCase-- > 0){
int N, M;
StringTokenizer stringTokenizer = new StringTokenizer(br.readLine());
N = Integer.parseInt(stringTokenizer.nextToken());
M = Integer.parseInt(stringTokenizer.nextToken());
long[][] dp = new long[N+1][M+1];
for(int i = 0 ; i < M+1; i++){
dp[0][i] = 1;
}
for(int n = 1; n < N+1 ; n++){
for(int m = 1; m < M+1 ; m++){
// nλ²μ§Έ μ«μλ‘ mμ μ ννλ κ²½μ° + μ ννμ§ μλ κ²½μ°
dp[n][m] = dp[n-1][m/2] + dp[n][m-1];
}
}
System.out.println(dp[N][M]);
}
}
}
'μκ³ λ¦¬μ¦ > λ°±μ€' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[ λ°±μ€ / BOJ 2473 ] μΈ μ©μ‘ ( JAVA / μλ° ) (0) | 2021.10.07 |
---|---|
[ λ°±μ€ / BOJ 2812 ] ν¬κ² λ§λ€κΈ° ( JAVA / μλ° ) (0) | 2021.10.07 |
[ λ°±μ€ / BOJ 2665 ] λ―Έλ‘ λ§λ€κΈ° ( JAVA / μλ° ) (0) | 2021.10.03 |
[ λ°±μ€ / BOJ 1535 ] μλ ( JAVA / μλ° ) (0) | 2021.10.03 |
[ λ°±μ€ / BOJ 1302 ] λ² μ€νΈμ λ¬ ( JAVA / μλ° ) (0) | 2021.10.03 |