BOJ - 괄호 추가하기 3(16639)
링크 dp로 풀이하려다 막혀 시간복잡도를 계산해 보니 10! * 20 = 7천만 정도로 가능할 것 같아 Brute Force로 풀이했다. 숫자를 담을 벡터와 연산자를 담을 벡터를 따로 두고 Brute Force를 진행한다. 1 + 3 + 5 + 7 위와 같은 식이 있다면, 숫자 벡터엔 1 3 5 7 , 연산자 벡터엔 + + + 이 처음에 들어가 있게 된다. 연속된 두 개의 숫자, 중간의 연산자를 묶어 계산한 뒤, 벡터를 복사하여 넘겨주는 식으로 진행한다. 1. 4 5 7 , + + 2. 1 8 7 , + + 3. 1 3 12 , + + 위 작업을 숫자 벡터의 크기가 1이 될 때까지 하고, max값을 갱신한다. dp 풀이: https://www.acmicpc.net/problem/11066 (파일 합치기) 위 문제와 비슷한 방법으로 풀이한다. maxdp[i][j] = i ~ j 까지의 최댓값 mindp[i][j] = i ~ j 까지의 최솟값 위 두 배열을 이용하여, i ~ j 가 작은 범위부터 0 ~ n 범위까지 구해가면 된다. 이 때, 음수로 인해 4가지 경우에 대해 모두 연산을 해 주어야 한다. (음수(최소) * 음수(최소) -> 최대일 수도 있기 때문) 최대, 최대 최대, 최소 최소, 최대 최소, 최소 Brute Force 풀이 #include<iostream> #include<algorithm> #include<math.h> #include<string> #include<vector> #include<stack> #include<queue> #include<map> #include<set> using namespace std; #define FIO ios_base::sync_with_stdio(false); cin.tie(NULL) #define pii p...