문제출처: https://www.acmicpc.net/problem/16395
풀이
파스칼의 삼각형같은 이항계수의 성질을 이용하는 문제는 dp로 접근하는게 제일 쉬운 것 같습니다.
각 행의 맨 왼쪽 값을 1로 고정시켜놓고 n+1Cr+1=nCr+nCr+1 의 성질을 이용하여 dp식을 세웠습니다.
*각 행의 맨 오른쪽 값1은 최초의 값 1설정 후 dp계산시 저절로 1로 고정된 상태가 됩니다.
코드
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | #include<iostream> #include<vector> #include<algorithm> using namespace std; int n, k; int dp[31][31]; int main() { cin >> n >> k; for (int i = 0; i < 31; i++) { dp[i][0] = 1; } for (int i = 1; i < 31; i++) { for (int j = 1; j <= i; j++) { dp[i][j] = dp[i - 1][j - 1] + dp[i - 1][j]; } } cout << dp[n-1][k-1] << endl; } | cs |
결과
'문제풀이(BOJ) > 다이나믹 프로그래밍' 카테고리의 다른 글
[백준 11055] 가장 큰 증가 부분수열 (0) | 2020.03.09 |
---|---|
[백준 1309] 동물원 (0) | 2020.01.09 |
[백준 1010] 다리 놓기 (0) | 2019.12.11 |
[백준 11052] 카드 구매하기 (0) | 2019.12.11 |
[백준 1912] 연속합 (0) | 2019.12.08 |