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 41 42 43 44 45 46 47 48 49 50 51 52 53 54 | #include <stdio.h> #include <string> #include <iostream> #include <algorithm> using namespace std; string part, arr1, arr2; int dp[25][3][105] = { 0 }; int main() { getline(cin, part); getline(cin, arr1); getline(cin, arr2); for (int j = 0; j < arr1.size(); j++) { if (part[0] == arr1[j]) { dp[0][1][j] = 1; } if (part[0] == arr2[j]) { dp[0][2][j] = 1; } } for (int k = 1; k < part.size(); k++) { for (int j = 0; j < arr1.size(); j++) { if (part[k] == arr1[j]) { int sum = 0; for (int t = 0; t < j; t++) { sum += dp[k - 1][2][t]; } dp[k][1][j] = sum; } if (part[k] == arr2[j]) { int sum = 0; for (int t = 0; t < j; t++) { sum += dp[k - 1][1][t]; } dp[k][2][j] = sum; } } } int rst = 0; for (int i = 0; i < arr1.size(); i++) { rst += dp[part.size() - 1][1][i]; rst += dp[part.size() - 1][2][i]; } printf("%d", rst); } | cs |
'알고리즘 > DP' 카테고리의 다른 글
9252 LCS 2 (0) | 2019.07.12 |
---|---|
2229 조짜기 (0) | 2019.07.12 |
2352 반도체 설계 (0) | 2019.07.11 |
11049 행렬 곱셈 셈 순서 (0) | 2019.07.11 |
2688 줄어들지 않아 (0) | 2019.07.10 |