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 | #include <stdio.h> #include <string.h> #include <algorithm> using namespace std; int arr[3][100005] = { 0 }; int dp[3][100005] = { 0 }; int main() { int t; scanf("%d", &t); while (t--) { int n; scanf("%d", &n); for (int i = 1; i <= 2; i++) { for (int j = 1; j <= n; j++) { scanf("%d", &arr[i][j]); } } dp[1][1] = arr[1][1]; dp[2][1] = arr[2][1]; for (int i = 2 ; i <= n; i++) { dp[1][i] = arr[1][i] + max(dp[2][i - 1], dp[2][i - 2]); dp[2][i] = arr[2][i] + max(dp[1][i - 1], dp[1][i - 2]); } int rst = 0; for (int i = 1; i <= 2; i++) { for (int j = 1; j <= n; j++) { if (rst < dp[i][j]) rst = dp[i][j]; } } printf("%d\n", rst); memset(arr[1], 0, sizeof(int) * 100004); memset(arr[2], 0, sizeof(int) * 100004); memset(dp[1], 0, sizeof(int) * 100004); memset(dp[2], 0, sizeof(int) * 100004); } } | cs |
'알고리즘 > DP' 카테고리의 다른 글
2133 타일 채우기 (0) | 2019.07.08 |
---|---|
14501 퇴사 (0) | 2019.07.07 |
11057 오르막수 (0) | 2019.07.07 |
1699 제곱수의 합 (0) | 2019.07.07 |
11055 가장 큰 증가 부분 수열 (0) | 2019.07.07 |