zoukankan      html  css  js  c++  java
  • 贪心算法训练(八)——智力大冲浪(带期限和罚款的单位时间调度问题)

    1. 问题描述

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

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

    2. 输入格式

      输入共 4 行

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

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

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

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

    3. 输出格式

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

    4. 样例输入

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

    5. 样例输出

    9950

    6. 思路分析

      按照扣款额度从大到小排序,顺序处理每个任务,使其尽可能往后安排,如果不能安排,则选择扣款

    7. 代码(题目中数据默认按降序,所以我就不排序了)

    #include <iostream>
    #include <cstring>
    
    using namespace std;
    
    int m,n;
    int date[505],money[505],arrange[505];
    
    int Solve(int time);
    
    int main()
    {
        ios::sync_with_stdio(false);
        cin>>m>>n;
        memset(arrange,-1,sizeof(arrange));
        int i = 1;
        for(;i <= n;i++)
            cin>>date[i];
        for(i = 1;i <= n;i++)
            cin>>money[i];
        for(i = 1;i <= n;i++)
        {
            int k = Solve(date[i]);
            if(k != -1)
                continue;
            else
                m -= money[i];
        }
        cout<<m;
        return 0;
    }
    int Solve(int time)
    {
        int i = time;
        while(i >= 1)
        {
            if(arrange[i] == -1)
            {
                arrange[i] = 1;
                time = i;
                return time;
            }
            else
                i--;
        }
        return -1;
    }
  • 相关阅读:
    AndroidStudio(3 复刻SKY MAX 1.4.apk问题汇总)
    AndroidStudio(2 begin --- material design )
    2015.1.15~2015.9.25期间工作实用链接
    AndroidStudio(1 下载安装,环境搭建,使用设置)
    Android.Volley的解读:request
    EcpliseIDE各种问题及其解决方法(不定时更新)
    SpannableString 文字增强类
    自定义 标题栏 带返回按钮
    scrollview 与 listView 的显示不全问题
    右键全屏as3
  • 原文地址:https://www.cnblogs.com/NikkiNikita/p/9462108.html
Copyright © 2011-2022 走看看