문제 : https://www.acmicpc.net/problem/2240

 

2240번: 자두나무

자두는 자두를 좋아한다. 그래서 집에 자두나무를 심어두고, 여기서 열리는 자두를 먹고는 한다. 하지만 자두는 키가 작아서 자두를 따먹지는 못하고, 자두가 떨어질 때까지 기다린 다음에 떨어지는 자두를 받아서 먹고는 한다. 자두를 잡을 때에는 자두가 허공에 있을 때 잡아야 하는데, 이는 자두가 말랑말랑하여 바닥에 떨어지면 못 먹을 정도로 뭉개지기 때문이다. 매 초마다, 두 개의 나무 중 하나의 나무에서 열매가 떨어지게 된다. 만약 열매가 떨어지는 순간, 자두

www.acmicpc.net


[알고리즘풀이]

t[x] : x 초에 떨어지는 자두의 위치. ( 1이면 1번 나무, 2이면 2번 나무 )

dp[x][y][z] : x 초까지 y 번 방향을 전환했고 현재 z 위치에서 최댓값.

( z 가 0일 때 1번 나무, 1일 때 2번 나무라고 정의 )

 

-초기값

dp[x][0][0] : x 초에 0번 방향을 전환했고 1번 나무 위치에서 최댓값.

               = 1번 나무에서 지금까지 떨어진 자두의 수 ( 방향 전환 없으므로 1번 나무에서 계속 있었다. )

 

dp[x][1][1] : x 초에 1번 방향을 전환했고 2번 나무 위치에서 최댓값.

               = ( x - 1 초에서 0번 방향을 전환했고, 1번 나무 위치에서 최댓값 , x - 1 초에서 1번 방향을 전환했고,

                   2번 나 무 위치에서 최대값 ) 중 더 큰 값에 t[x] 가 2라면 + 1을 해준다.

-점화식

dp[x][y][0] = max(dp[x-1][y-1][1], dp[x-1][y][0]) 에 t[x] 가 1이라면 1을 더해준다.

dp[x][y][1] = max(dp[x-1][y-1][0], dp[x-1][y][1]) 에 t[x] 가 2라면 1을 더해준다.

 

#include<iostream>
#include<algorithm>

using namespace std;

int t[1001];
int n, m;
int dp[1001][31][2];

int main(void) {
	ios::sync_with_stdio(false);
	cin.tie(0);
	// 입력
	cin >> n >> m;
	for (int i = 1; i <= n; i++) {
		cin >> t[i];
	}
	// 초기값
	for (int i = 1; i <= n; i++) {
		dp[i][0][0] = dp[i - 1][0][0];
		dp[i][1][1] = max(dp[i - 1][1][1], dp[i - 1][0][0]);
		if (t[i] == 1)
			dp[i][0][0]++;
		if (t[i] == 2)
			dp[i][1][1]++;
	}
	// 점화식
	for (int i = 2; i <= n; i++) {
		for (int j = 1; j <= m; j++) {
			dp[i][j][0] = max(dp[i - 1][j - 1][1], dp[i - 1][j][0]);
			dp[i][j][1] = max(dp[i - 1][j - 1][0], dp[i - 1][j][1]);
			if (t[i] == 1)
				dp[i][j][0]++;
			else
				dp[i][j][1]++;
		}
	}
	int result = 0;
	for (int j = 0; j <= m; j++)
		for (int k = 0; k < 2; k++)
			if (dp[n][j][k] > result)
				result = dp[n][j][k];
	cout << result;
}

 

'Problem Solving > BOJ' 카테고리의 다른 글

[BOJ] 15650 - N 과 M (2)  (0) 2019.09.08
[BOJ] 15469 - N 과 M (1)  (0) 2019.09.08
[BOJ] 1937 - 욕심쟁이 판다  (0) 2019.09.03
[BOJ] 2156 - 포도주 시식  (0) 2019.09.03
[BOJ] 10844 - 쉬운 계단 수  (0) 2019.09.03

+ Recent posts