오늘의 알고리즘
[C++] 백준 9465번 스티커
하늘하늘 .
2022. 5. 3. 18:22
#include <iostream>
int sticker[2][100001] = {};
int dp[2][100001] = {};
int main()
{
int T = 0;
std::cin >> T;
for (int i = 0; i < T; ++i)
{
int N = 0;
std::cin >> N;
for (int j = 0; j < N; ++j)
{
std::cin >> sticker[0][j];
}
for (int j = 0; j < N; ++j)
{
std::cin >> sticker[1][j];
}
dp[0][0] = sticker[0][0];
dp[1][0] = sticker[1][0];
dp[0][1] = sticker[0][1] + dp[1][0];
dp[1][1] = sticker[1][1] + dp[0][0];
for (int j = 2; j < N; ++j)
{
dp[0][j] = sticker[0][j] + std::max(dp[1][j - 1], dp[1][j - 2]);
dp[1][j] = sticker[1][j] + std::max(dp[0][j - 1], dp[0][j - 2]);
}
std::cout << std::max(dp[0][N - 1], dp[1][N - 1]) << std::endl;
}
return 0;
}
1. dp는 한 개 차이의 대각선 or 두 개 차이의 대각선의 크기 중 큰 것으로 계산한다.
2. 마지막까지 이동했을 DP의 두개의 값 중 큰값을 제공한다.