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;
}

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

相关文章推荐

【贪心】 hdu1789 Doing Homework again

Doing Homework again http://acm.hdu.edu.cn/showproblem.php?pid=1789 Problem Description ...

HDU 1789 Doing Homework again(贪心算法)

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

HDU 1789 Doing Homework again 经典贪心

题意:有t组测试数据,每组测试数据中有n门功课,第一排完成它们的时间限制,第二排是未在限制的时间内完成的要扣除的分数,然后是需要求扣的分数最少。 思路:先按照扣分从大到小排序,分数相同则按照...

hdu1789 Doing Homework again (贪心+优先队列)

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

HDU 1789 Doing Homework again(贪心)

Doing Homework again Time Limit : 1000/1000ms (Java/Other)   Memory Limit : 32768/32768K (Java/Ot...

hdu1789(Doing Homework again 贪心)

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

HDU 1789 Doing Homework again (贪心)

HDU 1789 Doing Homework again (贪心)

hdu 1789 Doing Homework again(贪心)

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

HDU 1789 Doing Homework again(贪心)

原题链接Problem DescriptionIgnatius has just come back school from the 30th ACM/ICPC. Now he has a lot o...

HDU 1789 Doing Homework again 贪心

Doing Homework again Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Ot...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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