UESTCOJ2112 最大乘积

题目描述

输入 n n n个整数元素组成的序列 S S S,你需要找出一个乘积最大的连续子序列。如果这个最大的乘积不是正数,应输出-1。 1 < = n < = 18 1<=n<=18 1<=n<=18, − 10 < = S i < = 10 -10<=S_i<=10 10<=Si<=10
Standard Input
第一行输入一个整数,代表 n n n个整数
第二行是nn个整数组成的序列 S S S
Standard Output
输出一行,代表计算出来的最大乘积
UESTCOJ2112 最大乘积_第1张图片

题目链接

UESTCOJ最大乘积

思路

一个数组存输入数据,另一个数组存从下标为j的到下标为k的乘积,初始化ans=-1,如果有比其大的乘积数则将值赋给ans,最大时间复杂度为 O ( n 2 ) O(n^2) O(n2)

代码

#include
#define N 20
using namespace std;
int main(){
	int n,i,j,k,a[N];
	long long mul[N],ans=-1;
	cin>>n;
	for(i=0;i<n;i++){
		cin>>a[i];
		if(a[i]>ans) ans=a[i];//记录最大值 
	}
	//这里把j到k的乘积给算出来,类似于规定范围之间不同数的个数(每一段存进mp[i][j]中)
	for(j=0;j<n;j++){
		mul[j]=a[j];
		for(k=j+1;k<n;k++){
			mul[k]=mul[k-1]*a[k];//前面的乘积结果乘上新加的一项
			if(mul[k]>ans) ans=mul[k];//有更大则取出来
		}
	}
	cout<<ans<<endl;
	return 0;
}

你可能感兴趣的:(暴力求解)