https://www.acmicpc.net/problem/1010
1010번: 다리 놓기
입력의 첫 줄에는 테스트 케이스의 개수 T가 주어진다. 그 다음 줄부터 각각의 테스트케이스에 대해 강의 서쪽과 동쪽에 있는 사이트의 개수 정수 N, M (0 < N ≤ M < 30)이 주어진다.
www.acmicpc.net
다리 안겹치게 짓는거...
N <= M 이므로 M 중 N개를 중복 없이 선택하는 경우의 수와 같다. 그래서 조합으로 풀면 됨
코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Baek1010 { // 조합
public static int dp[][] = new int[30][30]; // dp
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int T = Integer.parseInt(br.readLine());
StringTokenizer st;
StringBuilder sb = new StringBuilder();
for(int i = 0; i < T; i++) {
st = new StringTokenizer(br.readLine(), " ");
int N = Integer.parseInt(st.nextToken());
int M = Integer.parseInt(st.nextToken());
sb.append(bridge(M, N)).append('\n');
}
System.out.println(sb);
}
public static int bridge(int m, int n) {
if(dp[m][n] > 0) return dp[m][n]; // 재활용
if(m == n || n == 0) return dp[m][n] = 1;
return dp[m][n] = bridge(m - 1, n - 1) + bridge(m - 1, n);
// n+1 C r+1 = n C r + n C r+1
}
}
https://st-lab.tistory.com/194 : 설명 잘된 블로그
'알고리즘 > 백준' 카테고리의 다른 글
[BaekJoon] 백준 1520번 _ 내리막 길 for JAVA _ DFS + DP 알고리즘 (0) | 2022.02.24 |
---|---|
[BaekJoon] 백준 1789번 _ 수들의 합 for JAVA _ 그리디 알고리즘 (0) | 2022.02.16 |
[BaekJoon] 백준 2644번 _ 촌수계산 for JAVA _ BFS 알고리즘 (0) | 2022.02.06 |
[BaekJoon] 백준 11725번 _ 트리의 부모 찾기 for JAVA _ BFS 알고리즘 (0) | 2022.02.05 |
[BaekJoon] 백준 7562번 _ 나이트의 이동 for JAVA _ BFS 알고리즘 (0) | 2022.02.03 |