51node 1163 贪心

原创 2018年04月17日 16:46:25
基准时间限制:1 秒 空间限制:131072 KB 分值: 20 难度:3级算法题
有N个任务,每个任务有一个最晚结束时间以及一个对应的奖励。在结束时间之前完成该任务,就可以获得对应的奖励。完成每一个任务所需的时间都是1个单位时间。有时候完成所有任务是不可能的,因为时间上可能会有冲突,这需要你来取舍。求能够获得的最高奖励。
Input
第1行:一个数N,表示任务的数量(2 <= N <= 50000)
第2 - N + 1行,每行2个数,中间用空格分隔,表示任务的最晚结束时间E[i]以及对应的奖励W[i]。(1 <= E[i] <= 10^9,1 <= W[i] <= 10^9)
Output
输出能够获得的最高奖励。
Input示例
7
4 20
2 60
4 70
3 40
1 30
4 50
6 10
Output示例
230


题意:中文题目不解释

思路:让你求能够得到的最高奖励,在截止时间之前都可以选择,用一个优先队列存可能得到的奖励,根据时间从大到小处理,当进入一个新的时间点或时间段时跟新答案,主要是贪心思想配合上优先队列。

#include<stdio.h>
#include<string.h>
#include<cmath>
#include<stdlib.h>
#include<time.h>
#include<algorithm>
#include<iostream>
#include<vector>
#include<queue>
#define ll long long
#define qq printf("QAQ\n");
using namespace std;
const int maxn=1e5+5;
struct node{
    int t;
	ll w;
}a[maxn];
bool cmp(node a,node b)
{
	return a.t>b.t;
}
int main()
{
    int n,m,w;
    while(scanf("%d",&n)!=EOF)
    {
    for(int i=0;i<n;i++)
    {
        scanf("%d%lld",&a[i].t,&a[i].w);
    }
    sort(a,a+n,cmp);
    priority_queue<int,vector<int>,greater<int> >q1;//小的优先
    priority_queue<ll>q;//大者优先
    int f=-1;
	ll ans=0;
    for(int i=0;i<=n;i++)
    {
        if(f==-1||a[i].t==f){
            q.push(a[i].w);
            f=a[i].t;
        }
        else {
        	while(f!=a[i].t&&!q.empty())
        	{
        		ans+=q.top();
            	q.pop();
            	f--;
			}
           q.push(a[i].w);
            f=a[i].t;
        }
    }
    printf("%lld\n",ans);
	}
    return 0;
}

51Nod-1163-最高的奖励

ACM模版描述题解这是一道十分不错的贪心问题,有O(nlogn)和O(n*α(n))解法。 One O(nlogn)算法: 将最晚结束时间升序排序,第n个任务最晚时间如果大于已经消耗的时间,则可以...
  • f_zyj
  • f_zyj
  • 2016-08-08 15:39:10
  • 599

POJ1163-The Triangle

转载请注明出处:優YoU http://user.qzone.qq.com/289065406/blog/1300454092 和POJ3176一模一样,不懂做这题的去看看我对3176的解释 这是...
  • lyy289065406
  • lyy289065406
  • 2011-07-31 12:13:05
  • 3121

51nod 1163 (贪心+优先队列)

有N个任务,每个任务有一个最晚结束时间以及一个对应的奖励。在结束时间之前完成该任务,就可以获得对应的奖励。完成每一个任务所需的时间都是1个单位时间。有时候完成所有任务是不可能的,因为时间上可能会有冲突...
  • liuyanfeier
  • liuyanfeier
  • 2016-03-23 20:10:46
  • 350

51Nod 1163 最高的奖励(贪心+优先队列/并查集合)

题目:最高奖励 有N个任务,每个任务有一个最晚结束时间以及一个对应的奖励。在结束时间之前完成该任务,就可以获得对应的奖励。完成每一个任务所需的时间都是1个单位时间。有时候完成所有任务是不可能的,...
  • qq_33850438
  • qq_33850438
  • 2016-02-23 05:18:59
  • 1492

51Nod 1163 最高的奖励 ( 贪心

1163 最高的奖励Description有N个任务,每个任务有一个最晚结束时间以及一个对应的奖励。在结束时间之前完成该任务,就可以获得对应的奖励。完成每一个任务所需的时间都是1个单位时间。有时候完成...
  • wang2332
  • wang2332
  • 2017-04-25 01:06:16
  • 253

51nod 活动安排问题 (贪心)

有若干个活动,第i个开始时间和结束时间是[Si,fi),只有一个教室,活动之间不能交叠,求最多安排多少个活动? 分析: 我们就是想提高教室地利用率,尽可能多地安排活动。 考虑容易想到的几种贪心...
  • h1021456873
  • h1021456873
  • 2015-10-12 16:49:14
  • 1880

51Nod 1163 最高的奖励 并查集&贪心

题目链接:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1163 t
  • u011632342
  • u011632342
  • 2014-10-01 20:16:41
  • 947

51node 1113

1113 矩阵快速幂 基准时间限制:3 秒 空间限制:131072 KB 分值: 40 难度:4级算法题   给出一个N * N的矩阵,其中的元素均为正整数。求这个矩阵的M次方。由于...
  • CS33sun
  • CS33sun
  • 2017-10-25 23:45:18
  • 77

1163: 亲和串(字符串)

Description 判断亲和串。亲和串的定义是这样的:给定两个字符串s1和s2,如果能通过s1循环移位,使s2包含在s1中,那么我们就说s2 是s1的亲和串。 Input 本...
  • lvhaoye
  • lvhaoye
  • 2017-07-30 18:41:32
  • 261

LightOJ 1163 - Bank Robbery (思维方程式求解)

1163 - Bank Robbery   PDF (English) Statistics Forum Time ...
  • helloiamclh
  • helloiamclh
  • 2016-02-09 22:32:23
  • 627
收藏助手
不良信息举报
您举报文章:51node 1163 贪心
举报原因:
原因补充:

(最多只允许输入30个字)