HDU 1789 Doing Homework again 贪心

原创 2015年11月18日 10:30:54

题意:有n门课程,每个课程有一个作业,每一个作业一天写完,一天只能写一门课作业,告诉你每一门课的最后交作业的期限,如果交不上就要扣除相应的学分,问你最少会扣除多少分?


想法:这题不是利用率贪心,就是简单的一点想法,首先按照完成的期限升序排序,因为你要先保证要完成期限少的,再去完成期限多的,因为期限少的不能在(少期限,大期限]这段区间完成而期限大的可以。当有超期限的那么他的学分一定会被扣掉,但是我们可以选择之前完成的作业里面扣分最少的和他换一下,那么不就保证扣分最少了吗?


#include<stdio.h>
#include<algorithm>
#include<queue>
using namespace std;
int n;
struct node
{
    int dl,sec;
    friend bool operator <(const node &a,const node &b)
    {
        return a.sec>b.sec;
    }
}hw[1000+5];
priority_queue<node>q;
bool cmp(node a,node b)
{
    if(a.dl==b.dl) return a.sec>b.sec;
    else return a.dl<b.dl;
}
int main()
{
    int test;
    scanf("%d",&test);
    while(test--)
    {
        scanf("%d",&n);
        while(!q.empty()) q.pop();
        for(int i=1;i<=n;i++)
        {
            scanf("%d",&hw[i].dl);
        }
        for(int i=1;i<=n;i++)
        {
            scanf("%d",&hw[i].sec);
        }
        sort(hw+1,hw+1+n,cmp);
        int sum=0,day=1;
        for(int i=1;i<=n;i++)
        {
            if(hw[i].dl<day)
            {
                q.push(hw[i]);
                node k=q.top();
                q.pop();
                sum+=k.sec;
            }
            else
            {
                q.push(hw[i]);
                day++;
            }
        }
        printf("%d\n",sum);
    }
    return 0;
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

HDU Problem - 1789 Doing Homework again【贪心】

Doing Homework again Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/...

贪心-hdu-1789-Doing Homework again

题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1789 题目意思: 有n个作业,每个作业有一个截止日期,每个作业如果超过截止日期完成的时候有一个惩罚...

HDU1789_Doing Homework again_贪心、并查集优

Doing Homework again Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Oth...
  • yuege38
  • yuege38
  • 2017年02月19日 17:34
  • 86

HDU1789 Doing Homework again 【贪心】

Doing Homework again Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/...

hdu 1789 Doing Homework again 贪心算法

Doing Homework againProblem DescriptionIgnatius has just come back school from the 30th ACM/ICPC. No...

hdu 1789 Doing Homework again(简单贪心)

Doing Homework again Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Ot...
  • opm777
  • opm777
  • 2014年01月23日 13:58
  • 970

[HDU1789]Doing Homework again[贪心]

题目链接:[HDU1789]Doing Homework again[贪心] 题意分析:Ignatius打比赛归来,结果老师布置了作业,每份作业都需要一天来完成,并且老师还好心地给了截至日期,要是超...

【贪心】HDU-1789 Doing Homework again

Doing Homework again Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/...

hdu 1789 Doing Homework again 贪心

题意:有n个任务,第一排是任务完成的最后时刻,第二排是任务不在指定时刻完成所受到的惩罚。 做法:优先要做分高的,然后每个任务找离自己最近的时间,且没有被占据的时间点去完成这任务。如果在截止时间前已经没...

hdu1789Doing Homework again【贪心算法】

#include #include using namespace std; //题意:有一组作业,每个作业都有自己的最后期限和分数,只要改作业在自己的最后期限之前完成都可以拿分, //每一种...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:HDU 1789 Doing Homework again 贪心
举报原因:
原因补充:

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