일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 가끔은_말로
- dropout
- tensorflow
- 미래는_현재와_과거로
- lazy propagation
- 백트래킹
- 자바스크립트
- 다익스트라
- 우선 순위 큐
- DP
- Overfitting
- dfs
- 분할 정복
- 이분 탐색
- 알고리즘
- pytorch
- 문자열
- 너비 우선 탐색
- NEXT
- BFS
- 회고록
- 크루스칼
- object detection
- 가끔은 말로
- 조합론
- back propagation
- 2023
- 세그먼트 트리
- 플로이드 와샬
- c++
Archives
- Today
- Total
Doby's Lab
백준 2670번: 연속부분최대곱 (C++) 본문
https://www.acmicpc.net/problem/2670
2670번: 연속부분최대곱
첫째 줄은 나열된 양의 실수들의 개수 N이 주어지고, 그 다음 줄부터 N개의 수가 한 줄에 하나씩 들어 있다. N은 10,000 이하의 자연수이다. 실수는 소수점 첫째자리까지 주어지며, 0.0보다 크거나
www.acmicpc.net
Solved By: DP
풀면서 Brute-Force 한 느낌이 들었습니다. 모든 시작점부터 n까지 다 곱해가면서 시작점마다 최댓값을 구하고, 또한 그 최댓값 N개 중에서도 최댓값을 구해야 합니다.
#include <iostream>
#define MAX 10001
using namespace std;
double arr[MAX];
double cache[MAX];
int n;
int main(){
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cin >> n;
for(int i = 1; i <= n; i++){
cin >> arr[i];
}
double result = 0;
// O(N^2) = O(100,000,000)
for(int i = 1; i <= n; i++){
double tmp = 1;
double maxValue = 0;
for(int j = i; j <= n; j++){
tmp *= arr[j];
maxValue = max(maxValue, tmp);
}
cache[i] = maxValue;
result = max(result, maxValue);
}
cout.precision(3);
cout << fixed;
cout << result << '\n';
return 0;
}
728x90
'PS > BOJ' 카테고리의 다른 글
백준 1210번: 마피아 (C++) (0) | 2022.06.12 |
---|---|
백준 14286번: 간선 끊어가기 2 (C++) (0) | 2022.06.12 |
백준 1965번: 상자넣기 (C++) (0) | 2022.06.07 |
백준 17484번: 진우의 달 여행 (Small) (C++) (0) | 2022.06.07 |
백준 15624번: 피보나치 수 7 (C++) (0) | 2022.06.06 |