아이디어
dp[i][j] 를 1 ~ j 까지 숫자 중 i 개를 문제에서 요구하는 규칙에 따라 뽑을 때 경우의 수라고 정의
dp[i][j] 는 1 ~ j / 2 까지 i - 1 개를 뽑고 여기에 j 를 추가하는 케이스들 + 1 ~ j-1 까지 i 개를 뽑은 케이스들의 합이된다.
dp[i][j] = dp[i - 1][j / 2] + dp[i][j - 1]
풀이코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int T = Integer.parseInt(br.readLine());
long[][] dp = new long[11][2001];
Arrays.fill(dp[0], 1);
for (int i = 1; i <= 10; i++) {
for (int j = 1; j <= 2000; j++) {
dp[i][j] = dp[i - 1][j / 2] + dp[i][j - 1];
}
}
StringBuilder results = new StringBuilder();
for (int i = 0; i < T; i++) {
StringTokenizer st = new StringTokenizer(br.readLine());
int n = Integer.parseInt(st.nextToken());
int m = Integer.parseInt(st.nextToken());
results.append(dp[n][m]).append("\n");
}
System.out.println(results);
}
}
'Algorithm > 백준 알고리즘' 카테고리의 다른 글
2056번. 작업 (1) | 2023.10.17 |
---|---|
2073번. 수도배관공사 (1) | 2023.10.16 |
2504번. 괄호의 값 (1) | 2023.10.11 |
9251번. LCS (0) | 2023.10.09 |
12865번. 평범한 배낭 (0) | 2023.10.09 |