zoukankan      html  css  js  c++  java
  • hdu 6188 Duizi and Shunzi

    首先最优解时每个数如果作为顺子,那么只可能为1次或者2次。首先将所有非0个数变为1或者2。在考虑特殊情况,对于某区间1 1 2 1 1时,用作两个顺子会更优。

    同理 1 1 2 1 2 1 1等等类似的也是这样,总结可得1 1 2或者1 1 1化为顺子为最优解,剩下的2都为对子。

    #include<cstdio>
    #include<cstdlib>
    #include<cstring>
    #include<string>
    #include<algorithm>
    #include<iostream>
    #include<queue>
    #include<map>
    #include<cmath>
    #include<set>
    #include<stack>
    #define ll long long
    #define pb push_back
    #define max(x,y) ((x)>(y)?(x):(y))
    #define min(x,y) ((x)>(y)?(y):(x))
    #define cls(name,x) memset(name,x,sizeof(name))
    #define fs first
    #define sc second
    #define mp make_pair
    #define L(x) (1<<x)
    #define next Next
    using namespace std;
    const int inf=1e9+10;
    const ll llinf=1e16+10;
    const int maxn=1e6+10;
    const int maxm=1e3+10;
    const int mod=1e9+7;
    int n;
    int A[maxn];
    int c[maxn];
    int main()
    {
        //freopen("in.txt","r",stdin);
        while(~scanf("%d",&n))
        {
            cls(c,0);
            for(int i=1;i<=n;i++)
            {
                scanf("%d",&A[i]);
                c[A[i]]++;
            }
            int ans=0;
            for(int i=1;i<=n;i++)
            {
                if(c[i]>=3)
                {
                    if(c[i]%2==1)
                    {
                        ans+=(c[i]-1)/2;
                        c[i]=1;
                    }
                    else
                    {
                        ans+=(c[i]-2)/2;
                        c[i]=2;
                    }
                }
            }
            //ci变为1或2
            for(int i=1;i<=n-2;i++)
            {
                if(c[i]==1&&c[i+1]==1&&c[i+2])
                {
                    c[i]=c[i+1]=0;
                    c[i+2]--;
                    ans++;
                }
            }
            for(int i=1;i<=n;i++)
            {
                if(c[i]==2)
                    ans++;
            }
            printf("%d
    ",ans);
        }
        return 0;
    }
  • 相关阅读:
    Fragment_3_Androidx中返回键的处理
    2.2.3.Architecture components_View Binding
    2.2.2.Architecture components_data binding2_源码分析
    经典排序
    动态规划求解最长公共子序列
    全排列问题
    钢条切割
    KMP
    Queue
    Stack
  • 原文地址:https://www.cnblogs.com/mgz-/p/7467350.html
Copyright © 2011-2022 走看看