分析:dp[i][0]表示到第i个数成绩为负时的最大积个数,dp[i][1]表示到第i个数成绩为正时的最大积个数。
#include<iostream>
using namespace std;
#define N 10005
#define max(a,b) ((a)>(b)?(a):(b))
int dp[N][2];
int main()
{
int T,t,i,n,sum,x;
t=1;
scanf("%d",&T);
while(T--)
{
scanf("%d",&n);
sum=0;
dp[0][0]=dp[1][0]=0;
for(i=1;i<=n;i++)
{
scanf("%d",&x);
if(x==0)
dp[i][0]=dp[i][1]=0;
else if(x==2)
{
if(dp[i-1][0]!=0)
dp[i][0]=dp[i-1][0]+1;
else
dp[i][0]=0;
dp[i][1]=dp[i-1][1]+1;
}
else if(x==-2)
{
dp[i][0]=dp[i-1][1]+1;
if(dp[i-1][0]!=0)
dp[i][1]=dp[i-1][0]+1;
else
dp[i][1]=0;
}
sum=max(sum,dp[i][1]);
}
printf("Case #%d: %d\n",t++,sum);
}
return 0;
}原文地址:http://blog.csdn.net/a809146548/article/details/46649537