문제
2670번: 연속부분최대곱
첫째 줄은 나열된 양의 실수들의 개수 N이 주어지고, 그 다음 줄부터 N개의 수가 한 줄에 하나씩 들어 있다. N은 10,000 이하의 자연수이다. 실수는 소수점 첫째자리까지 주어지며, 0.0보다 크거나
www.acmicpc.net
소스코드
#include <bits/stdc++.h>
using namespace std;
double dp[10001];
double arr[10001];
int main() {
ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
int n;
double ans = 0.0;
cin >> n;
for (int i = 1; i <= n; i++) cin >> arr[i];
dp[1] = arr[1];
for (int i = 2; i <= n; i++) {
dp[i] = max(arr[i], dp[i - 1] * arr[i]);
ans = max(dp[i], ans);
}
printf("%.3lf", ans);
}
풀이
계속해서 연속된 값과 현재의 값과 비교하여 만약 연속된 곱의 값이 현재 위치의 배열보다 작으면 새로 시작점을 지정하여 문제를 해결한다.
또한 4째자리에서 반올림하닌깐 printf로 해결하였다.
'Algorithm > dynamic programming' 카테고리의 다른 글
[백준] 알고리즘 8394번 - 악수 문제 (0) | 2021.03.27 |
---|---|
[백준] 알고리즘 13699번 - 점화식 문제 (0) | 2021.03.26 |
[백준] 알고리즘 15489번 - 파스칼의 삼각형 문제 (0) | 2021.03.25 |
[백준] 알고리즘 16395번 - 파스칼의 삼각형 문제 (0) | 2021.03.24 |
[백준] 알고리즘 14916번 - 거스름돈 문제 (0) | 2021.03.22 |