您的位置:首页 > 其它

UVA 11059 Maximum Product

2017-04-09 11:51 351 查看
这道题目由于n很小,直接枚举区间,需要的是起点和终点,然后再用一个循环得到这个区间的乘积。所以复杂度是O(n^3)。

需要注意的是,由于n最大为18,s最大为10,所以乘起来最大可以达到10^18,会爆int,用long long即可。

还需要注意的是,如果乘积不是正数,就输出0。特判一下n == 1 && a[i] < 0即可。

代码如下:

#include<bits/stdc++.h>
using namespace std;
int n, a[20];
long long Max;
long long Count(int s, int e)
{
long long sum = 1;
for(int i = s; i <= e; i++)
sum *= a[i];
return sum;
}

int main()
{
int k = 1;
while(scanf("%d", &n) != EOF)
{
Max = 0;
for(int i = 0; i < n; i++)
scanf("%d", &a[i]);
for(int i = 0; i < n; i++)
for(int j = i; j < n; j++)
{
long long t = Count(i, j);
if(t > Max)
Max = t;
}
if(n == 1 && a[0] < 0)
Max = 0;
printf("Case #%d: The maximum product is %lld.\n\n", k++, Max);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: