반응형
[알고리즘][DP][1010] 다리놓기
* 풀이
핵심은 선이 겹칠 수 없다는 것이다. 단순히 콤비네이션을 이용하여 풀 수 있지만 DP로 풀어보려하다 삽질을 많이 했다.
선이 1개일 때와 선이 2개 이상일 때를 구분지었다. 두번째 선부터 선이 겹치지 않는 것을 고려해줘야하기 때문!
arr[n][m] 가 n에서 m으로 가는 선이라고 했을 때 m은 최소한 n과 같아야 한다. 왜냐하면 n-1, n-2 ...가 선을 하나씩 차지했을 것이기 때문!
* 코드
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | package algorithm_DP; import java.util.Scanner; public class q_1010 { static int num; static int n, m; static int[][] arr; public static void main(String[] args) { Scanner scan = new Scanner(System.in); num = scan.nextInt(); while(num-->0) { n = scan.nextInt(); m = scan.nextInt(); arr = new int[n+1][m+1]; //1. 선을 하나 그었을 때 for(int i=0;i<=m;i++) arr[1][i]=i; //2. 두번째 선부터 점화식 for(int i=2;i<=n;i++) { for(int j=i;j<=m;j++) { for(int k=j;k>=i;k--) { arr[i][j] += arr[i-1][k-1]; } } } System.out.println(arr[n][m]); } } } | cs |
반응형
'CS > Algorithm' 카테고리의 다른 글
[알고리즘][문자열][2908] 상수 (0) | 2018.04.15 |
---|---|
[알고리즘] 백트래킹(Backtracking) (1) | 2018.04.13 |
[알고리즘][플로이드와샬][1389] 케빈 베이컨의 6단계 법칙 (0) | 2018.04.12 |
[알고리즘] 플로이드-와샬 알고리즘 (0) | 2018.04.12 |
[알고리즘][DFS][11403] 경로찾기 (0) | 2018.04.11 |
댓글