分析: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; }
时间: 2024-11-13 05:00:31