택시짱의 개발 노트

[백준] 17127번 벚꽃이 정보섬에 피어난 이유 본문

알고리즘

[백준] 17127번 벚꽃이 정보섬에 피어난 이유

택시짱 2020. 3. 31. 17:00

링크

https://www.acmicpc.net/problem/17127

 

17127번: 벚꽃이 정보섬에 피어난 이유

다음과 같이 나누는 것이 P의 합을 최대화 한다: [2] [5 3 1 4] [2] [3]

www.acmicpc.net

풀이

 

최대화된 네 개의 P의 합을 구하는 문제이다.

 

next_permutation을 이용하여 그룹이 끝나는 지점의 모든 조합을 구하여 최댓값을 구하도록 하였다.

 

#include<iostream>
#include<vector>
#include<algorithm>

#define SIZE 15
using namespace std;

int arr[SIZE];
int main(void) {
	cin.tie(NULL); cout.tie(NULL);

	int N; cin >> N;
	for (int i = 0; i < N; i++) {
		cin >> arr[i];
	}

	vector<int> idx(N, 0);

	for (int i = N - 1; i >= N - 4; i--) {
		idx[i] = 1;
	}

	int res = 0;
	do {
		vector<int> list;
		for (int i = 0; i < N; i++) {
			if (idx[i] == 1)
				list.push_back(i);
		}

		int left = -1, right, tmp = 0;

		for (auto l : list) {
			int t = 1;
			for (int i = left + 1; i <= l; i++) {
				t *= arr[i];
			}
			left = l;
			tmp += t;
		}

		res = max(res, tmp);
	} while (next_permutation(idx.begin(), idx.end()));

	cout << res;
}
반응형

'알고리즘' 카테고리의 다른 글

[프로그래머스] 크레인 인형뽑기 게임  (0) 2020.04.01
[백준] 5427번 불  (0) 2020.03.31
[백준] 13913번 숨바꼭질 4  (0) 2020.03.30
[백준] 12851번 숨바꼭질 2  (0) 2020.03.30
[프로그래머스] 가사 검색  (0) 2020.03.27
Comments