ZOJ 3923 Handshakes

水题。

算一下每个人和之前的人握手次数+之后的人和这个人握手次数。取最大值。

#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;

const int maxn=100000+10;
int n;
int a[maxn],dp[maxn];

int main()
{
    int T;
    scanf("%d",&T);
    while(T--)
    {
        scanf("%d",&n);
        int ans=0;
        for(int i=1; i<=n; i++) scanf("%d",&a[i]);
        dp[n+1]=0;
        for(int i=n; i>=1; i--)
        {
            if(a[i]==0) dp[i]=dp[i+1];
            else dp[i]=dp[i+1]+1;
        }
        for(int i=1; i<=n; i++) 
            ans=max(ans,dp[i+1]+a[i]);
        printf("%d\n",ans);
    }
    return 0;
}

 

posted @ 2016-04-11 10:08  Fighting_Heart  阅读(156)  评论(0编辑  收藏  举报