zoukankan      html  css  js  c++  java
  • HDU 4864Task(更多的联合培训学校1)(贪婪)

    职务地址:HDU4864

    这题又是一上来觉得是最小费用流,可是边太多。果然,敲完交上去后不断TLE。。

    小优化了两次也没过。

    sad。。

    后来看了题解才发现是贪心。

    。。贪心也不好想。大体思路是非常好想的。就是先都按时间从大到小排序,再遍历任务,从机器里找能匹配的。并在能匹配的里边找等级尽量小的与之匹配。对我来说的突破点在于找能匹配的机器时不是每次都要又一次找一遍。而是能够直接利用曾经找到的。

    这就避免了n^2的复杂度。这种时间复杂度就仅仅有m*100,明显不会超时。
    代码例如以下:

    #include <iostream>
    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    #include <math.h>
    #include <ctype.h>
    #include <queue>
    #include <map>
    #include<algorithm>
    using namespace std;
    int _hash[110];
    struct node
    {
        int time, lv;
    } task[110000], mac[110000];
    int cmp(node x, node y)
    {
        if(x.time==y.time)
            return x.lv>y.lv;
        return x.time > y.time;
    }
    int main()
    {
        int n, m, i, j, num;
        __int64 ans;
        while(scanf("%d%d",&n,&m)!=EOF)
        {
            num=0;
            ans=0;
            for(i=0; i<n; i++)
            {
                scanf("%d%d",&mac[i].time,&mac[i].lv);
            }
            for(i=0; i<m; i++)
            {
                scanf("%d%d",&task[i].time,&task[i].lv);
            }
            sort(mac,mac+n,cmp);
            sort(task,task+m,cmp);
            j=0;
            memset(_hash,0,sizeof(_hash));
            for(i=0; i<m; i++)
            {
                while(j<n&&mac[j].time>=task[i].time)
                {
                    _hash[mac[j].lv]++;
                    j++;
                }
                for(int k=task[i].lv; k<=100; k++)
                {
                    if(_hash[k])
                    {
                        _hash[k]--;
                        num++;
                        ans+=500*task[i].time+2*task[i].lv;
                        break;
                    }
                }
            }
            printf("%d %I64d
    ",num,ans);
        }
        return 0;
    }
    


    版权声明:本文博客原创文章。博客,未经同意,不得转载。

  • 相关阅读:
    luogu 2962 [USACO09NOV]灯Lights
    bzoj 1923
    bzoj 1013
    bzoj 3513
    bzoj 4259
    bzoj 4503
    CF 632E
    bzoj 3527
    bzoj 3160
    bzoj 2179
  • 原文地址:https://www.cnblogs.com/blfshiye/p/4629292.html
Copyright © 2011-2022 走看看