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 38 39 40 | #include <stdio.h> int arr[1005][2] = { 0 }; int dp[105][105][2] = { 0 }; int main() { int t; scanf("%d", &t); int maxN = 0, maxK = 0; for (int i = 1; i <= t; i++) { scanf("%d %d", &arr[i][0], &arr[i][1]); if (maxN < arr[i][0]) maxN = arr[i][0]; if (maxK < arr[i][1]) maxK = arr[i][1]; } dp[1][0][0] = 1; dp[1][0][1] = 1; for (int i = 2; i <= maxN; i++) { for (int j = 0; j <= maxK; j++) { dp[i][j][0] = dp[i-1][j][0] + dp[i-1][j][1]; if(j!=0) dp[i][j][1] = dp[i - 1][j][0] + dp[i - 1][j - 1][1]; else dp[i][j][1] = dp[i - 1][j][0]; } } for (int i = 1; i <= t; i++) { int n = arr[i][0]; int k = arr[i][1]; int rst = dp[n][k][0] + dp[n][k][1]; printf("%d\n", rst); } } | cs |
'알고리즘 > DP' 카테고리의 다른 글
6359 만취한 상범 (0) | 2019.07.06 |
---|---|
9507 Generations of Tribbles (0) | 2019.07.06 |
11726 2*n 타일링 (0) | 2019.07.06 |
2163 초콜릿 자르기 (0) | 2019.07.05 |
2167 2차원 배열의 합 (0) | 2019.07.05 |