Koder / 박성훈
article thumbnail

간단한 DP. 그런데 N범위가 작아서

브루트포스해도 될거같다.

 

dp[k]를 k번째 수를 곱할때의 최대값 으로 정한다.

그러면 dp[k]를 만들 수 있는 방법은

기존까지의 수들을 싹 버리고 k번째 수만을 가지고 새로 시작하는 경우이거나,

기존까지의 수들 = dp[k-1] 에 k번째 수를 곱하는 경우 두가지로 나뉘게 된다.

이렇게 짜주면 쉽게 AC를 받을 수 있다.

 

#include <stdio.h>

double arr[12345] = {0.0};
double dp[12345] = {0.0};

double max(double a, double b){return a>b?a:b;}

int main(){
	int n;
	double ans = -1;
	scanf("%d", &n);
	for(int i=0; i<n; i++){
		scanf("%lf", &arr[i]);
		dp[i] = arr[i];
	}
	for(int i=1; i<n; i++) dp[i] = max(arr[i], dp[i-1]*arr[i]);
	for(int i=0; i<n; i++) ans = max(ans, dp[i]);
	
	printf("%.3lf", ans);
	return 0;
}

 

반응형