[백준 c++] 2670 연속부분최대곱

jw·2022년 11월 22일
0

백준

목록 보기
94/141
post-thumbnail

문제

https://www.acmicpc.net/problem/2670
N개의 실수가 있을 때, 한 개 이상의 연속된 수들의 곱이 최대가 되는 부분을 찾아, 그 곱을 구하는 문제다.

풀이

dp를 이용해서 풀었다.
배열 dp[]에는 현재 index를 마지막으로할 때 연속부분최대곱을 저장한다.

dp[i] = max(a[i], dp[i-1] * a[i])

코드

#include <iostream>
#include <algorithm>
using namespace std;
int n;
double a[10001], dp[10001], mx;
int main()
{
    cin >> n;
    for (int i = 0; i < n; i++)
    {
        cin >> a[i];
        if (i == 0)
            dp[i] = a[i];
        else
            dp[i] = max(a[i], dp[i - 1] * a[i]);
        mx = max(mx, dp[i]);
    }
    printf("%.3f\n", mx);
    return 0;
}
profile
다시태어나고싶어요

0개의 댓글