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;
}