• 贪心算法(5.智力大冲浪+解题思路)


    1、带期限和罚款的单位时间任务调度

                                                            智力大冲浪

    题目描述

    小伟报名参加中央电视台的智力大冲浪节目。本次挑战赛吸引了众多参赛者,主持人为了表彰大家的勇气,先奖励每个参赛者  元。先不要太高兴!因为这些钱还不一定都是你的?!接下来主持人宣布了比赛规则:

    首先,比赛时间分为  个时段,它又给出了很多小游戏,每个小游戏都必须在规定期限  前完成。如果一个游戏没能在规定期限前完成,则要从奖励费  元中扣去一部分钱 , 为自然数,不同的游戏扣去的钱是不一样的。当然,每个游戏本身都很简单,保证每个参赛者都能在一个时段内完成,而且都必须从整时段开始。主持人只是想考考每个参赛者如何安排组织自己做游戏的顺序。作为参赛者,小伟很想赢得冠军,当然更想赢取最多的钱!注意:比赛绝对不会让参赛者赔钱!

    输入格式

    输入共四行。

    第一行为 ,表示一开始奖励给每位参赛者的钱;

    第二行为 ,表示有  个小游戏;

    第三行有  个数,分别表示游戏  到  的规定完成期限;

    第四行有  个数,分别表示游戏  到  不能在规定期限前完成的扣款数。

    输出格式

    输出仅一行,表示小伟能赢取最多的钱。

    样例

    样例输入

    10000
    7
    4 2 4 3 1 4 6
    70 60 50 40 30 20 10
    

    样例输出

    9950

    解题思路: 

        按照贪心策略,将扣款数额大的,尽量在规定时间内完成,所以将按照罚款数额的大小进行排序。

        如果完成期限是t,尽量在接近t的时候去完成这个任务,比如截止期限有1 ,3 ,4,给定时间4,本来都可以完成,如果先去完成时间3或者4,那么任务1就完成不了了。

        题目中已给出部分//注释

    例题:https://loj.ac/problem/10004

    AC代码:

    #include<bits/stdc++.h>
    
    using namespace std;
    struct node
    {
        int date,cost;
    };
    node s[505];
    int book[505];
    int cmp(const node &a,const node &b){return a.cost>b.cost;}
    int main()
    {
        int m,n;
        cin>>m;
        cin>>n;
        for(int i=0;i<n;i++){
            cin>>s[i].date;
        }
        for(int i=0;i<n;i++){
            cin>>s[i].cost;
        }
        sort(s,s+n,cmp);
        int sign,sum=0,signnum;
        for(int i=0;i<n;i++){
            sign = 0;
            for(int j=s[i].date;j>=1;j--){//在规定时间内,找有没有时间段可以去完成
                                          //for循环顺序很重要,尽量接近完成期限去完成,
                if(book[j]==0){book[j] = 1;sign = 1;break;}
            }
            if(sign==0)//找不到完成的时间段,证明此任务直接放弃
            {
                sum+=s[i].cost;
            }
        }
        printf("%d
    ",m-sum);
    }
    

    参考书籍为:信息学奥赛一本通

    只能选择相信自己,如果此时你放弃了,那些无数个夜晚幻想过的明天,也将成为泡沫。 

  • 相关阅读:
    用OBS studio(Open Broadcaster Software)录屏
    强力粘胶,粘金属
    Win10下不用虚拟机安装ubuntu, 及bash shell打开教程
    latex 的工具集
    python game游戏开发
    usdt 大户列表
    linux, windows, mac 的c/c++程序使用 breakpad 来进行崩溃汇报
    将python代码编译成目标机elf可执行程序的方法
    python的zigzag实现及金融技术指标分析库
    如何在left Join 中使用order排序
  • 原文地址:https://www.cnblogs.com/codepeanut/p/12920502.html
Copyright © 2020-2023  润新知