HDU 4868 Task
来源:互联网 发布:淘宝店铺注销流程 编辑:程序博客网 时间:2024/04/29 20:43
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4864
题意:有n个任务,m台机器,每个任务需要xi的时间去做,且难度为y,做完后会得到500*xi+2*yi的钱;每台机器也有一个使用时间上限xi以及机器的能力yi,一台机器可以完成一个任务仅当机器的x,y都大于任务的,现在每台机器只能做一个任务。求最大完成任务数量以及得到钱的最大值。
思路:通过数据可以发现,时间差造成的钱的影响远大于难度差造成的影响,所以我们要优先完成时间长的任务,我们将任务和机器均按照时间排序。从时间最长的任务开始选取,同时按照难度维护所有时间上限不低于当前任务的所有机器,D[i]表示难度为i的且时间上限不低于当前任务的机器数量,然后按照难度从小到大来选取完成当前任务的机器即可。
#include <cstdio>#include <cmath>#include <cstring>#include <string>#include <cstdlib>#include <iostream>#include <algorithm>#include <stack>#include <map>#include <set>#include <vector>#include <sstream>#include <queue>#include <utility>using namespace std;#define rep(i,j,k) for (int i=j;i<=k;i++)#define Rrep(i,j,k) for (int i=j;i>=k;i--)#define Clean(x,y) memset(x,y,sizeof(x))#define LL long long#define ULL unsigned long long#define inf 0x7fffffff#define mod 100000007const int maxn = 100009;int n,m;struct node{ int dif , time; int get() { return 500 * time + 2 * dif; }}task[maxn],mach[maxn];int D[109];bool cmp( node a , node b ){ if ( a.time == b.time ) return a.dif < b.dif; return a.time < b.time;}int main(){ while( scanf("%d%d",&n,&m) == 2 ) { rep(i,1,n) scanf("%d%d",&mach[i].time,&mach[i].dif); rep(i,1,m) scanf("%d%d",&task[i].time,&task[i].dif); sort( task + 1 , task + 1 + m , cmp ); sort( mach + 1 , mach + 1 + n , cmp ); int ans = 0; LL sum = 0; Clean(D,0); int r = n; int lasttime = task[m].time + 1; Rrep(i,m,1) { if ( task[i].time != lasttime ) { lasttime = task[i].time; while( mach[r].time >= lasttime && r >= 1 ) { D[ mach[r].dif ] ++; r--; } } rep(j,task[i].dif,100) if ( D[j] ) { ans++; D[j]--; sum += task[i].get(); break; } } printf("%d %I64d\n",ans,sum); } return 0;}
0 0
- HDU 4868 Task
- HDU 3776 Task
- hdu 3572 Task Schedule
- HDU 3572 Task Schedule
- HDU-1885-Key Task
- HDU 1885 Key Task
- hdu 3572 Task Schedule
- hdu An Easy Task
- hdu 4864 Task 贪心
- hdu 4864 Task 贪心
- HDU 4864(Task)
- hdu 4869 Task(贪心)
- HDU 4864 Task
- HDU 4864 Task(贪心)
- HDU 4864 Task(贪心)
- hdu-4864-Task
- 【HDU 4864】Task【贪心】
- Hdu-4864-Task
- sdut oj2178 链表的有序集合
- ubuntu下最全的软件安装、卸载、查看命令
- 回调函数
- iOS学习之——UICollectionView详解
- HDU 1203 I NEED A OFFER! 01背包变形
- HDU 4868 Task
- ArcGIS Runtime for Xamarin介绍
- 如何实现一个malloc
- 牛人谈如何阅读学术论文
- NYOJ 58-最少步数【DFS&&BFS】
- 题目71 独木舟上的旅行
- FindBugs Java代码审查工具
- html 校验
- sql, 需求:用户购买次数达到限购次数的话,在用户查看商品列表的时候,不显示该商品