HDU1789【贪心】

题目大意:给出n个作业,同时表示有n天.第一行输入表示截止时间(deadline 简称dl)第二行表示如果逾期,要扣除对应的学分。

按分数从大到小排序,如果一样,则dl小的排前面。然后遍历所以科目,如果dl这天没有被占用,则这天完成该作业。

#include <iostream>
#include <queue>
#include <algorithm>
#include<cstring>
#include<cstdio>
using namespace std;
#define MAX 1000+10

struct Sub {
    int deadline, score;
}sub[MAX];
bool is_used[MAX];

bool cmp(const Sub&a, const Sub&b) {
    if (a.score != b.score)
        return a.score > b.score;

    return a.deadline < b.deadline;
}
int main(void) {
    int t;
    int n;
    scanf("%d", &t);
    int all;
    int sum;
    while (t--) {
        all = 0;
        memset(is_used, 0, sizeof(is_used));
        sum = 0;
        scanf("%d", &n);
        int a;
        for (int i = 1; i <= n; i++) {
            scanf("%d", &a);
            sub[i].deadline = a;
        }
        for (int i = 1; i <= n; i++) {
            scanf("%d", &a);
            sub[i].score = a;
            sum += a;
        }
        sort(sub + 1, sub + 1 + n, cmp);
        for (int i = 1; i <= n; i++) {
            int day = sub[i].deadline;
            if (!is_used[day]) {
                is_used[day] = 1;
                all += sub[i].score;
            }
            else {
                while (--day) {
                    if (!is_used[day]) {
                        is_used[day] = 1;
                        all += sub[i].score;
                        break;
                    }
                }
            }
        }
        printf("%d\n", sum - all);
    }

    return 0;

}

原文地址:https://www.cnblogs.com/tennant/p/8878646.html

时间: 2024-11-12 01:24:40

HDU1789【贪心】的相关文章

HDU1789 Doing Homework again 【贪心】

Doing Homework again Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 6878    Accepted Submission(s): 4096 Problem Description Ignatius has just come back school from the 30th ACM/ICPC. Now he h

HDU1789时间贪心

Doing Homework again Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 13883    Accepted Submission(s): 8053 Problem Description Ignatius has just come back school from the 30th ACM/ICPC. Now he h

贪心练习 hdu1789

贪心算法 贪心算法(又称贪婪算法)是指,在对问题求解时,总是做出在当前看来是最好的选择.也就是说,不从整体最优上加以考虑,他所做出的是在某种意义上的局部最优解. 贪心算法不是对所有问题都能得到整体最优解,关键是贪心策略的选择,选择的贪心策略必须具备无后效性,即某个状态以前的过程不会影响以后的状态,只与当前状态有关.(摘自百度百科) 贪心选择 贪心选择是指所求问题的整体最优解可以通过一系列局部最优的选择,即贪心选择来达到.这是贪心算法可行的第一个基本要素,也是贪心算法与动态规划算法的主要区别.贪心

HDU1789 Doing Homework again 做作业【贪心】

题目链接:https://vjudge.net/problem/HDU-1789 题目大意: 给出N个作业的截至日期,和N个作业不交所扣掉的分数,要求输出扣除分数做少的方案. 解析: 与上一道销售商品类似,将分数从大到小排序,找到deadline,如果它的期限没有被占用,就在该天写完,然后vis置1,如果占用,则从它的前一天开始向前查找有没有空闲的日期,如果有则占用,vis置1.这样就可以得到最大分数.然后用总分数减去得到最大分数即为扣除的最小分数. #include <cstdio> #in

贪心初步 hdu1789 Doing Homework again

一道非常经典的题目 题目地址 题目大意 给出N个作业的截至日期,和N个作业不交所扣掉的分数,要求输出扣除分数做少的方案. 正确的策略是: 扣除分数大的先做 扣除分数相同,先截止的先做 做一件事的时候,从截止时间开始向第一天遍历,如果当天没有被作业占据则标记为占据.做这件事的日期越大越好. 如果不能满足3的条件,则为不能完成 1 #include <iostream> 2 #include <algorithm> 3 #include <string> 4 #includ

HDU1789(Doing Homework again)题解

HDU1789(Doing Homework again)题解 以防万一,题目原文和链接均附在文末.那么先是题目分析: [一句话题意] 给定任务分数和其截止日期,每日可完成一任务,输出当罚分尽可能小时的最小罚分. [题目分析] 由于写的时候就知道是贪心了(专项练习= =||),所以要设计贪心策略,但是应该先处理数据以便使用.由于要求罚分尽可能小,那么我们就根据罚分来排序.根据罚分从大到小排序,如果罚分相同则根据日期从小到大排序.(现在想想觉得似乎日期排不排都行..)那么我们的贪心策略应该尽可能保

【uva 1615】Highway(算法效率--贪心 区间选点问题)

题意:给定平面上N个点和一个值D,要求在x轴上选出尽量少的点,使得对于给定的每个店,都有一个选出的点离它的欧几里德距离不超过D. 解法:先把问题转换成模型,把对平面的点满足条件的点在x轴的直线上可得到一个个区间,这样就是选最小的点覆盖所有的区间的问题了.我之前的一篇博文有较详细的解释:关于贪心算法的经典问题(算法效率 or 动态规划).代码实现我先空着.挖坑~

【贪心+Treap】BZOJ1691-[Usaco2007 Dec]挑剔的美食家

[题目大意] 有n头奶牛m种牧草,每种牧草有它的价格和鲜嫩度.每头奶牛要求它的牧草的鲜嫩度要不低于一个值,价格也不低于一个值.每种牧草只会被一头牛选择.问最少要多少钱? [思路] 显然的贪心,把奶牛和牧草都按照鲜嫩度由大到小排序,对于每奶牛把鲜嫩度大于它的都扔进treap,然后找出后继. 不过注意后继的概念是大于它且最小的,然而我们这里是可以等于的,所以应该是找cow[i].fresh-1的后继,注意一下…… 1 #include<iostream> 2 #include<cstdio&

POJ1017 Packets(贪心算法训练)

Time Limit: 1000MS          Memory Limit: 10000K          Total Submissions: 51306          Accepted: 17391 Description A factory produces products packed in square packets of the same height h and of the sizes 1*1, 2*2, 3*3, 4*4, 5*5, 6*6. These pro