题目链接

一道很有技巧的贪心题目。

题意:有n个机器,m个任务。每个机器至多能完成一个任务。对于每个机器,有一个最大运行时间xi和等级yi,

对于每个任务,也有一个运行时间xj和等级yj。只有当xi>=xj且yi>=yj的时候,机器i才能完成任务j,并获得

500*xj+2*yj金钱。问最多能完成几个任务,当出现多种情况时,输出获得金钱最多的情况。

分析:机器和任务都按照先拍x从大到小,再拍y从大到小的顺序。然后遍历任务,注意f[]数组的作用,f[]数组标

记大于当前任务时间的机器的等级个数, 由于任务都是从大到小排序了,所以接下来时间已经不是影响了,因为

已经遍历过的机器的时间都是大于 将要遍历的机器的时间的。所以只需要从 这些符合时间条件的机器里选择一个

等级最小的,以免因为等级影响后面的遍历。 为什么要按照先x排序呢,因为500 > 2*100; 为什么按照y从大到

小,因为x相等的情况下,y越大,计算的值越大。

最后注意hdu的int64;

 #include <iostream>
#include <cstring>
#include <cstdlib>
#include <cmath>
#include <cstdio>
#include <vector>
#include <algorithm>
#define LL long long
using namespace std;
const int maxn = +;
int n, m, f[];
struct node
{
int x, y;
} ma[maxn], ta[maxn]; bool cmp(node a, node b)
{
if(a.x==b.x)
return a.y > b.y;
return a.x > b.x;
}
int main()
{
int i, j, k, cnt;
__int64 ans;
while(~scanf("%d%d", &n, &m))
{
ans = ; cnt = ;
memset(f, , sizeof(f));
for(i = ; i < n; i++)
scanf("%d%d", &ma[i].x, &ma[i].y);
for(i = ; i < m; i++)
scanf("%d%d", &ta[i].x, &ta[i].y);
sort(ma, ma+n, cmp);
sort(ta, ta+m, cmp);
j = ;
for(i = ; i < m; i++)
{
while(j < n)
{
if(ma[j].x >= ta[i].x)
f[ma[j].y] ++;
else break;
j ++;
}
for(k = ta[i].y; k <= ; k++)
{
if(f[k])
{
f[k] --;
ans += *ta[i].x + *ta[i].y;
cnt ++;
break;
}
}
}
printf("%d %I64d\n", cnt, ans);
}
return ;
}

最新文章

  1. 动态生成linearLayout
  2. My family No.1
  3. bool 类型存在数据库中为 0 和 1
  4. Java-java中无符号类型的处理
  5. 【原】iOS学习46之第三方CocoaPods的安装和使用(通用方法)
  6. ural 1247. Check a Sequence
  7. Complete the Sequence[HDU1121]
  8. elasticsearch插件之一:bigdesk
  9. hdu2093
  10. Maven错误Failed to read artifact descriptor for xxx:jar 和 missing artifact maven dependency
  11. 进程环境之C程序的存储空间布局
  12. hdu 3487
  13. javascriptt切换组件MyTab.js封装
  14. Android Studio稍微较新的版本下载
  15. VC内存溢出一例 –- 调用约定不一致 (_CRT_DEBUGGER_HOOK(_CRT_DEBUGGER_GSFAILURE)
  16. Linux的文件夹配置
  17. Linux 常见命令示例【一】
  18. python之pyqt4的简单窗口布局以及信号和槽(上代码)
  19. 给Linux系统/网络管理员的nmap的29个实用例子
  20. Loadrunner打不开浏览器以及卡死的各种问题

热门文章

  1. 【BZOJ 1007】 [HNOI2008]水平可见直线
  2. Configure xterm Fonts and Colors for Your Eyeball
  3. JPA学习---第三节:搭建JPA开发环境和全局事务介绍
  4. NodeJS从零开始——NPM的使用
  5. Ubuntu系统下USB转串口的使用
  6. android开发获取屏幕高度和宽度
  7. c++ g++3.4.5 g++4.8.2 由编译器引起的编译异常
  8. 单例模式(.NET)
  9. WPF 资源
  10. C#三种定时器的实现