求连乘最大

来源:互联网 发布:淘宝内衣模特摄影 编辑:程序博客网 时间:2024/05/22 03:11

  腾讯面试题,当时没解决,现在想想,好水,不敲题半年,不知不觉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 100000double 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;}

 

1 0
原创粉丝点击