最大连续子序列的乘积

题目链接:https://vjudge.net/problem/UVA-11059
分析
这道题求的是最大连续子序列的乘积,因为数据量小,可以采用暴力,下面用另一种方式求解。思想跟求最大连续子序列的和一样。

#include
#include
#include
using namespace std;
#define ll long long
const int N = 1e3 + 10;
ll a[N],minn,maxn;//因为存在负数,可能会把最小的数变成最大的数,所以同时保存最大值和最小值
int main()
{
	int n,k = 0;
	while(~scanf("%d",&n)) {
		for(int i = 0; i < n; i++)
			scanf("%lld",a + i);
		maxn = minn = a[0];
		ll ans = a[0],s,t;
		for(int i = 1; i < n; i++) {
			s = max(max(maxn * a[i],minn * a[i]),a[i]);
			t = min(min(maxn * a[i],minn * a[i]),a[i]);
			maxn = s,minn = t;
			ans = max(ans,maxn);
		}
		if(ans < 0) ans = 0;
		printf("Case #%d: The maximum product is %lld.\n\n",++k,ans);
	}
	return 0;
}

你可能感兴趣的:(序列型动态规划)