• hdu 5210 Delete(打表 贪心)


    题意:http://bestcoder.hdu.edu.cn/contests/contest_chineseproblem.php?cid=578&pid=1001

    思路:讲述列从大到小排列 先把数量多的数字剪掉 最后遍历求和

    #include<cstdio>
    #include<cstring>
    #include<iostream>
    #include<algorithm>
    using namespace std;
    int num[100+10];
    int cmp(int a,int b)
    {
        return a>b;
    }
    int main()
    {
        int n,m,temp;
        int i,j,k;
        while(scanf("%d",&n)!=EOF)
        {
            int ans=0;
            memset(num,0,sizeof(num));
            for(i=0;i<n;i++)
            {
                scanf("%d",&temp);
                num[temp]++;
            }
            scanf("%d",&m);
            sort(num,num+n+1,cmp);
            for(i=0;i<=n;i++)
            {
                if(m==0||num[i]==0) break;
                if(m>=num[i])
                {
                    //printf("1...%d %d
    ",m,num[i]);
                    m-=(num[i]-1);
                    num[i]=1;
                    //printf("2...%d
    ",m);
                }
                else if(m<num[i])
                {
                    num[i]-=m;
                    m=0;
                }
            }
            for(i=0;i<n;i++)
            {
                if(num[i]!=0) ans++;
                else break;
            }
            //printf("%d %d...
    ",ans,m);
            if(m!=0)
                ans-=m;
            printf("%d
    ",ans);
        }
        return 0;
    }
    
  • 相关阅读:
    将博客搬至CSDN
    HDU1175 + HDU1728+BFS转弯
    HDU1401 BFS
    HDU1401 双广BFS
    分布式一致性
    GFS架构分析
    云计算资源分享与下载
    mysql导入导出数据方法
    缓存设计的一些思考
    HBase性能优化方法总结
  • 原文地址:https://www.cnblogs.com/sola1994/p/4524881.html
Copyright © 2020-2023  润新知