贪心讲题1

Description

Farmer John 有太多的工作要做啊!!!!!!!!为了让农场高效运转,他必须靠他的工作赚钱,每项工作花一个单位时间。 他的工作日从0时刻开始,有1000000000个单位时间(!)。在任一时刻,他都可以选择编号1~N的N(1 <= N <= 100000)项工作中的任意一项工作来完成。 因为他在每个单位时间里只能做一个工作,而每项工作又有一个截止日期,所以他很难有时间完成所有N个工作,虽然还是有可能。 对于第i个工作,有一个截止时间D_i(1 <= D_i <= 1000000000),如果他可以完成这个工作,那么他可以获利P_i( 1<=P_i<=1000000000 ). 在给定的工作利润和截止时间下,FJ能够获得的利润最大为多少呢?答案可能会超过32位整型。

Input

第1行:一个整数N. 第2~N+1行:第i+1行有两个用空格分开的整数:D_i和P_i.

Output

输出一行,里面有一个整数,表示最大获利值。

Sample Input

3
2 10
1 5
1 7

Sample Output

17

类型:时间(花费)为定值1,报酬不同 ,但因为有时间限制,所以在满足限制的同时让利益最大就是我们的目标了。

so,对于每个工作(按照截止时间排好序之后),我们选一个工作 如果可以做 而且收益最大,那么就尽量去做他。

若目前已经选择的工作数>D_i ,表明已经没有时间去做当前工作了,所以我们就希望从之前选了的工作中,选一个收益最小的扔掉,用当前工作去补上那个位置;

否则的话,那么就直接选他就OK了。

Code:

#include<iostream>
#include<cstdio>
#include<queue>
#include<algorithm>
#define N 100010
using namespace std;
struct use{int st;long long v;}p[N];
priority_queue<long long>q;
bool cmp(use a,use b){return a.st<b.st;}
long long ans;
int main(){
  int n,now(0);
  scanf("%d",&n);
  for (int i=1;i<=n;i++) scanf("%d%lld",&p[i].st,&p[i].v);
  sort(p+1,p+n+1,cmp);
  for (int i=1;i<=n;i++){
      ans+=p[i].v;now++;q.push(-p[i].v);
      if (now>p[i].st){ans+=q.top();q.pop();now--;}
}
  cout<<ans<<endl;
}

(解释一下代码)(虽然是别人的,但是的确是很巧妙)

{

  首先按照截止时间升序排序之后。

  now表示已经选择了多少个工作。

  每次一旦有工作来,就把它扔进堆中,表示已经选择了。

  (但是实际情况是,不是所以都都可以选的)

  所以有一个delete操作

  当已经选择的工作数>他的日期。

  表明已经没有时间去做当前工作了,所以我们选一个收益最小的扔掉(代码中也有可能是他自己)

   (可能会有这个疑问:要是扔掉一个收益最小的之后还是不能做他,这不就不合法了吗?)

  (但是answer是合法的。因为   当前的截止时间是>=已经选择的工作中最晚的截止时间的,所以扔掉一个之后,再用当前的去替换一定是合法的。(因为以选择中截止时间最晚的那个是合法的))

}

时间: 2024-08-10 02:09:33

贪心讲题1的相关文章

贪心/思维题 Codeforces Round #310 (Div. 2) C. Case of Matryoshkas

题目传送门 1 /* 2 题意:套娃娃,可以套一个单独的娃娃,或者把最后面的娃娃取出,最后使得0-1-2-...-(n-1),问最少要几步 3 贪心/思维题:娃娃的状态:取出+套上(2),套上(1), 已套上(0),先从1开始找到已经套好的娃娃层数, 4 其他是2次操作,还要减去k-1个娃娃是只要套上就可以 5 详细解释:http://blog.csdn.net/firstlucker/article/details/46671251 6 */ 7 #include <cstdio> 8 #i

hdu 4550 贪心 思维题 不错

http://acm.hdu.edu.cn/showproblem.php?pid=4550 想了挺久,然后各种分类 终于AC,如果是现场,对自己没信心的话,估计还是要WA,,,,,,然后搜题解,发现人家都认为是简单题,看来我还是太弱了,牡丹江没有做出来K看来还是自己贪心和思维有问题 d是一个Deque 最朴素的算法是,如果当前的数<=d.front(),那么插入队列的前面,否则插入队列后面,但是有零所以需要单独处理,还是自己多举例找规律 我的策略: 1.记录0的个数zero,最小非零的数的个数

LightOJ 1166 Old Sorting 置换群 或 贪心 水题

LINK 题意:给出1~n数字的排列,求变为递增有序的最小交换次数 思路:水题.数据给的很小怎么搞都可以.由于坐标和数字都是1~n,所以我使用置换群求循环节个数和长度的方法. /** @Date : 2017-07-20 14:45:30 * @FileName: LightOJ 1166 贪心 或 置换群 水题.cpp * @Platform: Windows * @Author : Lweleth ([email protected]) * @Link : https://github.co

HDU1050(贪心水题)

Description The famous ACM (Advanced Computer Maker) Company has rented a floor of a building whose shape is in the following figure. The floor has 200 rooms each on the north side and south side along the corridor. Recently the Company made a plan t

网络流题目详讲+题单(提高版)(持续更新中......)

PS:如果你觉得自己还不够强(和我一样弱),可以去入门版看看 写在前面的话(潦草) 这篇博客不会讲定义,理解啊什么的,那些知识点网络上......仅仅是题目详讲 但是每一道题的题解和知识点还是会涵盖的 笔者还很菜,还有很多不会,只是想让自己会了的题目大家更容易懂 建议使用博客右边的主题切换,换成夜间模式可能看起来更舒服(随性) 笔者根据自己的感受(也有一定参考性的)给题目编了个难度,有主观色彩,可以根据实际需要来选择 前置知识点: 网络流题目详讲(入门版) 题目来了: PS:若无特殊说明,均为l

Codeforces Round #451 (Div. 2)【A,B,C,D,E】【C题:模拟 D题:尺取+贪心 E题:思维+优先队列维护最值】

特判最后一位即可 1 #include<bits/stdc++.h> 2 3 using namespace std; 4 #define int long long 5 6 signed main(){ 7 int n;cin>>n;int t=n%10; 8 if(t==0) cout<<n; 9 else if(t>5) { 10 cout<<(n+10-t); 11 } 12 else { 13 cout<<(n-t); 14 }

Codeforces Round #631 (Div. 2) C. Dreamoon Likes Coloring(贪心好题/意识流题解)

Dreamoon likes coloring cells very much. There is a row of nn cells. Initially, all cells are empty (don't contain any color). Cells are numbered from 11 to nn . You are given an integer mm and mm integers l1,l2,…,lml1,l2,…,lm (1≤li≤n1≤li≤n ) Dreamoo

CF 500 C. New Year Book Reading 贪心 简单题

New Year is coming, and Jaehyun decided to read many books during 2015, unlike this year. He has n books numbered by integers from 1 to n. The weight of the i-th (1 ≤ i ≤ n) book is wi. As Jaehyun's house is not large enough to have a bookshelf, he k

HDU 4864 Task 贪心 好题

Task Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 4103    Accepted Submission(s): 1077 Problem Description Today the company has m tasks to complete. The ith task need xi minutes to complete.