-
11058 크리보드알고리즘/백준 2019. 3. 21. 15:21
1. 문제
2. 코드
123456789101112131415161718192021222324252627282930313233343536373839#include <queue>#include <iostream>using namespace std;int N;long dp[101];long solve(int n);int main(){scanf("%d", &N);printf("%ld", solve(N));}long solve(int n) {if (n <= 0)return 0;if (n == 1)return dp[n] = 1;if (dp[n] > 0)return dp[n];//A를 입력할 경우dp[n] = n;dp[n] = max(dp[n], solve(n - 1) + 1);//복붙할 경우int j = 2;//5번째전~ 3번째전꺼를 계속 붙여넣기했을 때 값 비교for (int i = n - 3; i > n - 6; i--) {//A를 입력할 경우와 비교dp[n] = max(dp[n], solve(i)*j);j++;}return dp[n];}cs 3. 후기
이 문제는 단순히 A를 추가하는 것과 복사붙여넣기 하는 것을 비교하는데 몇번째 전꺼를 복사 붙여넣기 하는지가 관건이다. 그래서 N-5일 때 드래그, 복사, 붙여넣기, 붙여넣기, 붙여넣기 이므로 solve(n-5)*2 부터 n-4, n-3까지 다 비교해본다 숫자가 커질수록 더 큰 수를 붙여넣기하지만, 붙여넣기하는 횟수는 적어지기 때문에 비교를 해서 큰 값을 리턴해주어야 한다.
출처 - https://stack07142.tistory.com/148
'알고리즘 > 백준' 카테고리의 다른 글
12865 평범한 배낭 (0) 2019.03.26 11066 파일합치기 (0) 2019.03.25 2294 동전 2 (0) 2019.03.19 2293 동전 1 -DP (0) 2019.03.19 10942 팰린드롬? (0) 2019.03.19