PS
백준 2670. 연속부분최대곱
tose33
2021. 7. 13. 17:13
https://www.acmicpc.net/problem/2670
2670번: 연속부분최대곱
첫째 줄은 나열된 양의 실수들의 개수 N이 주어지고, 그 다음 줄부터 N개의 수가 한 줄에 하나씩 들어 있다. N은 10,000 이하의 자연수이다. 실수는 소수점 첫째자리까지 주어지며, 0.0보다 크거나
www.acmicpc.net
실버4로 책정된 문제치고 너무 쉽다 싶었는데 dp로 풀수 있어서 그런것같다.
나는 브루트포스 알고리즘으로 풀었다.
인덱스 i부터 i+1, i+2 .. i+n-1 까지 곱하면서 최댓값을 계속 갱신하고 i값을 1씩 증가시키면 된다.
#include <iostream>
#include <algorithm>
using namespace std;
int n;
double ans = 0;
double nums[10001];
// 최댓값 갱신
void Calculate(double num)
{
ans = max(ans, num);
}
int main()
{
cin >> n;
for(int i = 0; i < n; i++)
{
cin >> nums[i];
}
for(int i = 0; i < n; i++)
{
double num = nums[i];
Calculate(num);
for(int j = i+1; j < n; j++)
{
num *= nums[j];
Calculate(num);
}
}
printf("%.3f", ans);
}