您的位置:首页 > 职场人生

求连乘最大

2016-04-15 08:47 316 查看
  腾讯面试题,当时没解决,现在想想,好水,不敲题半年,不知不觉ACM快散功了,现在得捡起来了~

 n个数,求出最大连乘

eg:

5

-8  -2 100 -0.5  100

最大连乘为 -2*100*(-0.5)*100=10000

dp 维护正的最大,负的最小

#include <cstdlib>
#include <cmath>
#include<iostream>
#include<cstdio>
#include<iostream>
using namespace std;
#define maxn 100000
double a[maxn];
double dp1[maxn];
double dp2[maxn];
int n;
int main()
{
while(~scanf("%d",&n))
{
double maxx;
for(int i=0;i<n;i++)
scanf("%lf",&a[i]),dp1[i]=dp2[i]=0;
maxx=a[0];
for(int i=0;i<n;i++)
{
maxx=max(maxx,a[i]);
if(a[i]>0)
dp1[i]=a[i];
if(a[i]<0)
dp2[i]=a[i];
}
for(int i=1;i<n;i++)
{
dp1[i]=max(max(dp1[i-1]*a[i],dp2[i-1]*a[i]),dp1[i]);
dp2[i]=min(min(dp2[i-1]*a[i],dp1[i-1]*a[i]),dp2[i]);
}
for(int i=0;i<n;i++) maxx=max(maxx,dp1[i]);

printf("%.2f\n",maxx);

}
return 0;
}


 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  面试笔试