pid=4864">http://acm.hdu.edu.cn/showproblem.php?pid=4864

大致题意:有n台机器和m个任务,都有两个參数工作时间time和难度level。每一个机器一天仅仅能完毕一个任务。一个任务仅仅能被一台机器完毕。每一个任务完毕后的利润是500*time+2*level。

问在一天能完毕尽量多的任务下获得的利润是多少。



思路:由上述公式知决定利润的决定性因素是时间,对任务按时间优先从大到小排序,对每个任务先找出全部满足该任务时间的机器。然后从这些机器里选择合适且level最低的机器。也就是说机器的level从小到大排序,然后从最小的合适的level開始找合适的时间,找到一个这样合适的机器就结束。因为数目最大为100000。所以能够借助STL的set按level保存机器,查找时使用lower_bound()函数寻找下界。

#include <stdio.h>
#include <iostream>
#include <map>
#include <set>
#include <stack>
#include <vector>
#include <math.h>
#include <string.h>
#include <queue>
#include <string>
#include <stdlib.h>
#include <algorithm>
#define LL long long
#define _LL __int64
#define eps 1e-8
#define PI acos(-1.0)
using namespace std; struct node
{
    int time,level;
    bool operator < (const struct node &tmp)const
    {
        if(time == tmp.time)
            return level > tmp.level;
        return time > tmp.time;
    }
}task[100010];
int n,m; int cnt;
_LL ans; int main()
{
    int x,y;     while(~scanf("%d %d",&n,&m))
    {
        multiset <int> mac[110];
        int maxlevel = -1;
        for(int i = 1; i <= n; i++)
        {
            scanf("%d %d",&x,&y);
            mac[y].insert(x);
            maxlevel = max(maxlevel,y);
        }         for(int i = 1; i <= m; i++)
        {
            scanf("%d %d",&task[i].time,&task[i].level);
        }
        sort(task+1,task+1+m);
        cnt = 0;
        ans = 0;         for(int i = 1; i <= m; i++)
        {
            x = task[i].time;
            y = task[i].level;
            for(int j = y; j <= maxlevel; j++)
            {
                multiset<int>::iterator it = mac[j].lower_bound(x);
                if(it == mac[j].end() || (*it) < x)
                    continue;
                cnt++;
                ans += 500 * task[i].time + 2 * task[i].level;
                mac[j].erase(it);
                break;
            }
        }
        printf("%d %I64d\n",cnt,ans);
    }
    return 0;
}





最新文章

  1. Ajax跨域:jsonp还是CORS
  2. C# Enum,Int,String的互相转换 枚举转换
  3. 在finally中调用一个需要await的方法
  4. WITH AS的含义
  5. [BTS] System.Xml.Schema.XmlSchemaException: The complexType has already been declared when generate IDoc schema.
  6. angular例子笔记
  7. 延迟加载图片的 jQuery 插件——lazyload.js
  8. 使用JS动态创建含有1000行的表格
  9. .NET(C#):XmlArrayItem特性和XmlElement特性在序列化数组的差别
  10. webapi中的Route的标签的命名参数name的使用
  11. NSArray或NSDictionary中汉字输出
  12. HDU-1994-利息计算
  13. PAT---完美数列
  14. ES5 forEach()用法和提前终止遍历
  15. 修改NSMutableArray中的元素时的注意事项
  16. redis简介与持久化
  17. 【译】9. Java反射——泛型
  18. ubuntu MySQL的安装
  19. 代码的重构(Refactor-Extract)
  20. Oracle之表的相关操作

热门文章

  1. IDEA -- idea无法导入HttpServlet包解决方法
  2. 获取本地验证码cookie
  3. Linux环境下验证码不显示F12报500
  4. pxc集群安装
  5. assert.fail()详解
  6. nginx下TP5 隐藏入口文件+支持pathinfo模式+配置多项目根目录
  7. 还在为百度网盘下载速度太慢烦恼?chrome浏览器插件帮你解决!
  8. DataBase安装及简单配置
  9. Swagger UI教程
  10. 九度oj 题目1206:字符串连接