티스토리 뷰
1. 문제 링크
https://www.acmicpc.net/problem/2670
2670번: 연속부분최대곱
N개의 양의 실수가 있을 때, 한 개 이상의 연속된 수들의 곱이 최대가 되는 부분을 찾아, 그 곱을 출력하는 프로그램을 작성하시오. 예를 들어 아래와 같이 8개의 양의 실수가 주어진다면, 색칠된
www.acmicpc.net
2. 문제 개요
N개의 양의 실수가 있을 때, 한 개 이상의 연속된 수들의 곱이 최대가 되는 부분을 찾아 그 곱을 출력하는 프로그램을 작성하시오.
3. 문제 힌트
우선 모두 자기 자신만 곱한 걸 나타내기 위해 초기화는 자기 자신들로 해주자.
곱해 나갈 때, 곱한 결과가 자기 자신보다 크다면 누적하는 그런 형태로 나타내 주자.
음수가 없기 때문에 문제는 없다. 코드를 보는 편이 이해가 더 잘 될 것 같다.
4. 코드
#include <cstdio> #include <algorithm> using namespace std; int n; double arr[10001]; double ans = 0; int main() { scanf("%d", &n); for (int i = 1; i <= n; ++i) scanf("%lf", &arr[i]); ans = arr[1]; for (int i = 2; i <= n; ++i) { if (arr[i] * arr[i - 1] >= arr[i]) { arr[i] = arr[i - 1] * arr[i]; } ans = max(ans, arr[i]); } printf("%.3lf", ans); return 0; }
5. 결과

'알고리즘 > Dynamic Programming' 카테고리의 다른 글
boj, 백준) 1086. 박성원 ( C / C++) (0) | 2021.03.23 |
---|---|
boj, 백준) 9177. 단어 섞기 (C / C++) (0) | 2020.12.31 |
boj, 백준) 1949. 우수 마을 ( C / C++) (0) | 2020.06.05 |
boj, 백준) 2306. 유전자 ( C / C++) (0) | 2020.06.05 |
백준, boj) 1006. 습격자 초라기 ( C / C++) (0) | 2020.06.01 |