HDU 4476 Cut the rope

题意:

每一条绳子可以剪一次,可以不剪。最多可以得到多少段一样长的绳子。

#include <cstdio>
#include <cstring>
#include <cmath>
#include <iostream>
#include <algorithm>
#include <stack>
#include <queue>

using namespace std;
const int N = 100009;
int re[N],s[N];
int n;
int main()
{
  //  freopen("in.txt","r",stdin);
    int cas;
    scanf("%d",&cas);
    while(cas--)
    {
        scanf("%d",&n);
        memset(re,0,sizeof(s));
        int a;
        for(int i=0;i<n;i++)
        {
            scanf("%d",&a);
            re[a]++;
        }
        for(int i=1;i<N;i++)
        s[i] = s[i-1]+re[i];
        int ans = 0;
        for(int i=1;i<N;i++)
        if(re[i])
        {
            int tmp=n - s[((i-1)>>1)];
                tmp+=re[i];
            ans = max(ans,tmp);
        }
        cout<<ans<<endl;
    }
    return 0;
}


你可能感兴趣的:(HDU 4476 Cut the rope)