1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
|
#include<iostream>
#include<vector>
#include <algorithm>
#include <utility>
using namespace std;
int solve(vector<int>& nums, int start, int end) {
if (start == end) return nums[start];
if (end - 1 == start) return min(nums[start], nums[end]) * 2;
cout << start << " " << end << endl;
int mid = (start + end) / 2;
int left = solve(nums, start, mid);
int right = solve(nums, mid + 1, end);
cout << "left :" << left << endl;
cout << "right :" << right << endl;
int count_left = 1;
int count_right = 1;
int minsum = 0;
int length = 0;
int tmp = nums[mid];
for (int i = mid; i >= start; i--,count_left++) {
if (tmp < nums[i])break;
tmp = nums[i];
for (int j = mid + 1; j <=end; j++,count_right++) {
if (minsum < min(tmp, nums[j])*(count_left + count_right )) {
tmp = min(tmp, nums[j]);
minsum = tmp * (count_left + count_right);
cout << tmp << " " << count_left << " " << count_right <<" "<< minsum << endl;
}
}
count_right = 1;
}
cout << "minsume : " << minsum << endl;
cout << endl;
return max(max(left, right), minsum);
}
void main() {
vector<int> p = { 1, 4, 4, 4, 4, 1, 1 };
cout << solve(p, 0, p.size() - 1);;
}
|
cs |
https://algospot.com/judge/problem/read/FENCE
algospot.com :: FENCE
울타리 잘라내기 문제 정보 문제 너비가 같은 N개의 나무 판자를 붙여 세운 울타리가 있습니다. 시간이 지남에 따라 판자들이 부러지거나 망가져 높이가 다 달라진 관계로 울타리를 통째로 교체하기로 했습니다. 이 때 버리는 울타리의 일부를 직사각형으로 잘라내 재활용하고 싶습니다. 그림 (b)는 (a)의 울타리에서 잘라낼 수 있는 많은 직사각형 중 가장 넓은 직사각형을 보여줍니다. 울타리를 구성하는 각 판자의 높이가 주어질 때, 잘라낼 수 있는 직사각형의 최대
algospot.com
'Programming' 카테고리의 다른 글
알고스팟_게임판덮기(BOARDCOVER) (0) | 2020.03.27 |
---|---|
컴공 출신 프로그래머, 창업 성공하기 힘들다..!? 과연 그럴까? (1) | 2019.01.18 |
컴공 출신 프로그래머 미래 직업을 알아보자 (0) | 2019.01.17 |
중소기업 프로그래머 현실 알려줄게요.. (0) | 2019.01.17 |
문과도 이해가능한 컴공 필수지식-①네트워크 IP와 해저케이블 (0) | 2019.01.07 |