题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=4561
乘法运算负负得正,当序列中有多个-2时,-2在序列中有两种结合方式(与前一个-2或者后一个-2结合),所以顺序和逆序遍历两次数组得出最大值,思路跟最大字段和差不多。
如序列:-2 2 -2 2 2 -2 2 ,顺序遍历时前两个-2相乘,结果为5,逆序时后两个-2相乘,结果为6,最后答案为6。
#include<stdio.h>
#define N 10005
int main()
{
int t,n,cas,i,j,res,x,y,a[N];
scanf("%d",&t);
for(cas=1;cas<=t;cas++){
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%d",&a[i]);
x=y=res=0;
for(i=0;i<n;i++){
if(a[i]==0){
x=0;
y=0;
continue;
}
if(a[i]==2)
x++;
else
y++;
if(x+y>=res&&y%2==0)
res=x+y;
}
x=y=0;
for(i=n-1;i>0;i--){
if(a[i]==0){
x=0;
y=0;
continue;
}
if(a[i]==2)
x++;
else
y++;
if(x+y>=res&&y%2==0)
res=x+y;
}
printf("Case #%d: %d\n",cas,res);
}
}