카테고리 없음

[C] 백준 - 9465번: 스티커

C0MPAS 2024. 4. 15. 14:11

4월 15일(월) - 다이나믹 프로그래밍 (9465번)

 

9465번: 스티커

첫째 줄에 테스트 케이스의 개수 T가 주어진다. 각 테스트 케이스의 첫째 줄에는 n (1 ≤ n ≤ 100,000)이 주어진다. 다음 두 줄에는 n개의 정수가 주어지며, 각 정수는 그 위치에 해당하는 스티커의

www.acmicpc.net


최초 생각 정리


문제점


풀이

#define _CRT_SECURE_NO_WARNINGS
#pragma warning(disable: 4996)

#include <stdio.h>

int sticker[2][100001];
int dp[2][100001];

int MAX(int x, int y)
{
	return ((x > y) ? (x) : (y));
}

int main(void)
{
	int T;
	scanf("%d", &T);

	int n;
	while (T--)
	{
		scanf("%d", &n);

		for (int i = 0; i <=1 ; i++)
		{
			for (int j = 1; j <= n; j++)
			{
				scanf("%d", &sticker[i][j]);
			}
		}

		dp[0][0] = dp[1][0] = 0;
		dp[0][1] = sticker[0][1];
		dp[1][1] = sticker[1][1];

		for (int i = 2; i <= n; i++)
		{
			dp[0][i] = MAX(dp[1][i - 1], dp[1][i - 2]) + sticker[0][i];
			dp[1][i] = MAX(dp[0][i - 1], dp[0][i - 2]) + sticker[1][i];
		}

		int score = MAX(dp[0][n], dp[1][n]);
		printf("%d\n", score);
	}

	return 0;
}