-
[BOJ] #9465 _ 스티커Problem Solving/BOJ 2019. 8. 12. 22:34
[스티커] https://www.acmicpc.net/problem/9465
9465번: 스티커
문제 상근이의 여동생 상냥이는 문방구에서 스티커 2n개를 구매했다. 스티커는 그림 (a)와 같이 2행 n열로 배치되어 있다. 상냥이는 스티커를 이용해 책상을 꾸미려고 한다. 상냥이가 구매한 스티커의 품질은 매우 좋지 않다. 스티커 한 장을 떼면, 그 스티커와 변을 공유하는 스티커는 모두 찢어져서 사용할 수 없게 된다. 즉, 뗀 스티커의 왼쪽, 오른쪽, 위, 아래에 있는 스티커는 사용할 수 없게 된다. 모든 스티커를 붙일 수 없게된 상냥이는 각 스티커에 점
www.acmicpc.net
아주 간단한 DP문제이다.
100점인 스티커를 기준으로 가능한 경우는 아래와 같이 3가지다.
이를 이용하여 점화식을 만들 수 있다.
점화식을 만들기 위해 우선,
1번째 줄에서 시작하는 경우와 2번째 줄에서 시작하는 경우로 나누어 생각해야 한다.
- dp[0][0] = sticker[0][0] (1번째 줄 기준, n=1)
- dp[1][0] = sticker[1][0] (2번째 줄 기준, n=1)
- dp[0][1] = max(dp[0][0], dp[1][0] + sticker[0][1]) (1번째 줄 기준, n=2)
- dp[1][1] = max(dp[1][0], dp[0][0] + sticker[1][1]) (2번째 줄 기준, n=2)
- dp[0][n] = max(dp[0][n - 1], max(dp[1][n - 1] + sticker[0][n], dp[1][n - 2] + sticker[0][n])) (n>2)
- dp[1][n] = max(dp[1][n - 1], max(dp[0][n - 1] + sticker[1][n], dp[0][n - 2] + sticker[1][n])) (n>2)점화식을 이용하여 다음과 같이 소스를 짤 수 있다.
[ 소스 코드 ]
#include <cstdio> #include <algorithm> #define MAX 100000 using namespace std; int sticker[2][MAX + 1] = { 0, }, dp[2][MAX + 1] = { 0, }; int n; void solve(); void init_arr(); int main() { int T; scanf("%d", &T); //Input for (int i = 0; i < T; i++) { scanf("%d", &n); for (int j = 0; j < 2; j++) { for (int k = 0; k < n; k++) scanf("%d", &sticker[j][k]); } solve(); printf("%d\n", max(dp[0][n - 1], dp[1][n - 1])); init_arr(); } return 0; } void solve() { dp[0][0] = sticker[0][0]; //init dp[1][0] = sticker[1][0]; dp[0][1] = max(dp[0][0], dp[1][0] + sticker[0][1]); dp[1][1] = max(dp[1][0], dp[0][0] + sticker[1][1]); for (int i = 2; i < n; i++) { dp[0][i] = max(dp[0][i - 1], max(dp[1][i - 1] + sticker[0][i], dp[1][i - 2] + sticker[0][i])); dp[1][i] = max(dp[1][i - 1], max(dp[0][i - 1] + sticker[1][i], dp[0][i - 2] + sticker[1][i])); } } void init_arr() { for (int i = 0; i < 2; i++) { for (int j = 0; j < n; j++) dp[i][j] = 0; } }
'Problem Solving > BOJ' 카테고리의 다른 글
[BOJ] #3190 _ 뱀 (0) 2019.08.12 [BOJ] #14889 _ 스타트와 링크 (0) 2019.08.12 [BOJ] #17143 _ 낚시왕 (0) 2019.08.04 [BOJ] #15686 _ 치킨 배달 (0) 2019.08.04 [BOJ] #17140 _ 이차원 배열과 연산 (0) 2019.07.17 댓글