Study hard

(c++)백준 11058번: 크리보드 본문

백준/DP

(c++)백준 11058번: 크리보드

Nimgnoej 2020. 9. 16. 15:59

www.acmicpc.net/problem/11058

 

11058번: 크리보드

N = 3인 경우에 A, A, A를 눌러 A 3개를 출력할 수 있다. N = 7인 경우에는 A, A, A, Ctrl-A, Ctrl-C, Ctrl-V, Ctrl-V를 눌러 9개를 출력할 수 있다. N = 11인 경우에는 A, A, A, Ctrl-A, Ctrl-C, Ctrl-V, Ctrl-V, Ctrl-A, Ctrl-C, Ctrl

www.acmicpc.net

[풀이]

DP를 이용하여 풀 수 있는 문제였다.

DP[i] : i번째 눌렀을 때 A의 최대 개수

점화식

DP[0] ~ DP[5]까지는 A를 하나 출력하는 게 최대

DP[i] = max(DP[i-1]+1,DP[i-3]*2,DP[i-4]*3,DP[i-5]*4)

※화면을 선택하여 복사하는 단계가 있으므로 i-1번째와 i-2번째는 붙여넣을 수 없다.

 

#include <iostream>
#include <algorithm>//min
using namespace std;

int N;
long long dp[101];

void DP() {
	//5번까지는 A를 하나 출력하는게 최대
	dp[1] = 1;
	dp[2] = 2;
	dp[3] = 3;
	dp[4] = 4;
	dp[5] = 5;
	//A를 하나 출력하는 것과 이전에 복사해둔 것을 붙여넣기 하는 것 비교
	for (int i = 6; i <= N; i++) {
		dp[i] = dp[i - 1] + 1;
		for (int j = 1; j <= i - 2; j++)
			dp[i] = max(dp[i], dp[i - 2 - j] * (j + 1));
	}
	cout << dp[N] << '\n';
}

int main() {
	cin >> N;
	DP();
	return 0;
}

 

'백준 > DP' 카테고리의 다른 글

(c++)백준 11049번: 행렬 곱셈 순서  (0) 2020.09.16
(c++)백준 1890번: 점프  (0) 2020.09.16
(c++)백준 2294번: 동전 2  (0) 2020.09.16
(c++)백준 2293번: 동전 1  (0) 2020.09.16
(c++)백준 10422번: 괄호  (0) 2020.09.16