
#include<iostream>
using namespace std;
int cost[100001][2];
int dp[100001][2];//n번째의 위/아래까지 선택했을 경우의 점수
int t, n;
int main(){
cin>>t;
while(t--){
cin>>n;
for(int j=0; j<2; j++){
for(int i=1; i<=n; i++){
cin>>cost[i][j];
}
} dp[1][0]=cost[1][0];
dp[1][1]=cost[1][1];
for(int i=2; i<=n; i++){
dp[i][0]=max(cost[i][0]+dp[i-2][1], max(dp[i-1][1]+cost[i][0], dp[i-1][0]));
dp[i][1]=max(cost[i][1]+dp[i-2][0], max(dp[i-1][0]+cost[i][1], dp[i-1][1]));
} cout<<max(dp[n][0], dp[n][1])<<"\n";
}
}
현재자리 선택할때(두가지 경우 고려), 안할때(한가지 경우만 고려)
'알고리즘' 카테고리의 다른 글
| Boj 11404 c++ 플로이드 워셜 (1) | 2025.07.17 |
|---|---|
| Boj 9251 c++ LCS (0) | 2025.07.16 |
| Boj 1932 c++ 정수 삼각형 (0) | 2025.07.15 |
| Boj 15666 c++ N과 M(12) (0) | 2025.07.14 |
| Boj 11660 c++ 구간 합 구하기 5 (0) | 2025.07.14 |