문제 출처: https://www.acmicpc.net/problem/11058
Silver 1
1번 빼고 2~3번은 세트고 4번일 때 원래 있던 버퍼로 추가할 수 있다.
1) 버튼 한 번 누르기 전 A 개수 + 1
2) 만약 충분히 세트로 이루고 남는다면, 4번 누르기 전 2,3번 누르니깐 버튼 세 번 누르기 전 A 개수 x 2 개 가능 -> 왜냐면 전체 창에 있는 A개수 복사해서 4번이란 버튼으로 한 번 더 추가되는거니깐.
3) 2,3,4번 누르기 한 번 더 전에 있던 화면 A 개수를 복사한 채로 붙여넣기를 2번 한다면, 2,3,4,4번 버튼 누르기 전(i-4)은 붙여넣기가 2번이니깐 화면 속 A가 3번 반복 -> i-4 x 3 개수 가능
4) 2,3,4,4,4번 버튼을 누르기 전(i-5)이면 붙여넣기가 3번 -> i-5 x 4개 가능
주의 : long long 데이터형을 써야함
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#define INF 987654321
#define MAX 1000001
using namespace std;
long long dp[101];
int main() {
int N;
cin >> N;
dp[1] = 1;
dp[2] = 2;
dp[3] = 3;
dp[4] = 4;
dp[5] = 5;
dp[6] = 6;
for (int i = 7; i <= N; i++) {
dp[i] = max({dp[i-1]+1, dp[i-3]*2, dp[i-4]*3,dp[i-5]*4});
}
cout << dp[N];
return 0;
}
max 알고리즘 함수에 {}로 둬서 여러 인자들을 비교할 수 있는 걸 첨 알았다! 다를 때에도 쓸 수 있을듯