namespace BOJ
{
class No_9465
{
static void Main()
{
using StreamReader input = new StreamReader(new BufferedStream(Console.OpenStandardInput()));
using StreamWriter output = new StreamWriter(new BufferedStream(Console.OpenStandardOutput()));
int t = int.Parse(input.ReadLine());
while(t-- > 0)
{
int n = int.Parse(input.ReadLine());
int[,] array = new int[2, n];
for(int i=0 ;i<2 ;i++)
{
int[] inputs = Array.ConvertAll(input.ReadLine().Split(), int.Parse);
for(int j=0 ;j<n ;j++)
array[i, j] = inputs[j];
}
// dp[i,j] = i,j 좌표에서의 스티커 점수의 최댓값
// 스티커는 변을 공유하지 않음
int[,] dp = new int[2, n];
dp[0, 0] = array[0, 0];
dp[1, 0] = array[1, 0];
// 자신과 첫번째 대각선
// 자신과 두번째 대각선
for(int i=1 ;i<n ;i++)
{
if(i==1)
{
dp[0, 1] = dp[1, 0] + array[0, 1];
dp[1, 1] = dp[0, 0] + array[1, 1];
}
else
{
dp[0, i] = Math.Max(dp[1, i - 1] + array[0, i], dp[1, i - 2] + array[0, i]);
dp[1, i] = Math.Max(dp[0, i - 1] + array[1, i], dp[0, i - 2] + array[1, i]);
}
}
output.WriteLine(Math.Max(dp[0, n-1], dp[1, n-1]));
}
}
}
}
N = 1일때를 고려하지않아 98%의 테스트 케이스에서 OutOfIndexRange 에러가 발생하였다.
왜 에러가 뜨는지 바로 생각하지 못하고 질문하기에서 질문을 보고 확인하였다. [링크]
다음엔 좀 더 신중하게 문제를 풀어봐야겠다.
다이나믹 프로그래밍