https://www.acmicpc.net/problem/2670
문제 설명
N개의 실수가 있을 때, 한 개 이상의 연속된 수들의 곱이 최대가 되는 부분을 찾아, 그 곱을 출력한다.
N은 10000 이하의 자연수이며, 실수는 0.0보다 크거나 같고, 9.9보다 작거나 같다.
해결
dp[n] : n번까지의 연속곱의 최대곱
dp[1] = arr[1]
dp[2] = arr[2] * dp[1] || arr[2]
...
dp[n] = arr[n] * dp[n-1] || arr[n]
=> n - 1번까지의 최대곱 * n번 값 or n번 곱 중 큰 것이 dp[n]이
코드
#include<bits/stdc++.h>
#define x first
#define y second
#define INF 1e9
using namespace std;
int n;
double arr[10005], answer = 0.0;
double dp[10005];
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin >> n;
for (int i = 0; i < n; i++)
cin >> arr[i];
dp[0] = arr[0];
for (int i = 1; i < n; i++) {
dp[i] = max(dp[i - 1] * arr[i], arr[i]);
answer = max(answer, dp[i]);
}
cout.precision(3);
cout << fixed;
cout << answer;
}
참고로 소숫점 3자리까지만 출력하고 싶다면
cout.precision(3);
cout << fixed;
이 두 줄을 써 주면 된다.
cout.precision(3); 만 쓰면 정수 부분을 합쳐 3자리를 출력한다.
'백준' 카테고리의 다른 글
[백준/c++] BOJ 15990 - 1, 2, 3 더하기 5 (1) | 2024.02.06 |
---|---|
[백준/c++] BOJ 9461 - 파도반 수열 (2) | 2023.12.07 |
[백준/c++] BOJ 1003 - 피보나치 함수 (1) | 2023.12.07 |
[백준/c++] BOJ 11048 - 이동하기 (1) | 2023.12.07 |
[백준/c++] BOJ 15988 - 1, 2, 3 더하기 3 (2) | 2023.12.07 |