zoukankan      html  css  js  c++  java
  • uva11729

    题目大意:

    你有n个部下,每个部下要完成一个任务,你需要花费bi去交代任务给第i个部下,随后他需要ji分钟去完成,现在你需要安排这些任务分配顺序,使得最终的完成任务时间(所有任务都完成)最小。

    输入:

    第一行一个整数n表示任务数。

    接下来n行为bi,ji代表交代任务的时间以及执行任务的时间。

    输出:

    每组数据输出最早完成所有任务的时间。

    分析:

    这道题目属于贪心,我们来考虑这样的情况。交换任务x、y(将y提到x前)分为以下两种情况:

    1、y比x早结束

    那么将任务y提到x前,完成这两个任务需要的时间比交换前的要晚。

    2、y比x晚结束

    若要求最后完成的时间比交换前则急需要B[x]+J[x]+B[y]>=B[y]+J[y]+B[x],化简后就是J[x]>=J[y]

    所以我们可以按照执行所需时间排序(大到小),优先安排执行时间长的任务,可以得到最优的解。

    分类:简单贪心

    代码:

    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    #define maxlen 1010
    using namespace std;
    struct node
    {
        int a,b;
    }massion[maxlen];
    bool cmp(node p,node q)
    {
        return p.b>q.b;
    }
    int main ()
    {
        int n,l=1;
        while(scanf("%d",&n),n)
        {
            for(int i=0;i<n;++i)
                scanf("%d%d",&massion[i].a,&massion[i].b);
            sort(massion,massion+n,cmp);
            int ans=0,s=0;
            for(int i=0;i<n;++i)
            {
                s+=massion[i].a;
                ans=max(ans,s+massion[i].b);
            }
            printf("Case %d: %d
    ",l++,ans);
        }
    }
    

      

  • 相关阅读:
    2018 北京区域赛H
    LeetCode 第 207 场周赛
    LeetCode 第 209 场周赛
    LeetCode 第 211 场周赛
    PAT 甲级真题题解(121-155)
    PAT 甲级真题题解(63-120)
    PAT 甲级真题题解(1-62)
    Codeforces 1108E2 Array and Segments (Hard version)(差分+思维)
    Codeforces 1108F MST Unification(最小生成树性质)
    Codeforces 1092C Prefixes and Suffixes(思维)
  • 原文地址:https://www.cnblogs.com/shuzy/p/3178567.html
Copyright © 2011-2022 走看看