uva 11729 Commando War(贪心)

本文介绍了一种针对多个部下分配多个任务的问题,通过贪心算法实现最优的任务调度方案,旨在减少总任务完成时间。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这个题意思就是说 n个部下,完成n个任务。要达到的最终目标是总用时尽可能少
每个部下有两个属性 丢一个是你布置任务需要的时间 b 第二个是他完成任务需要的时间 j
同一时刻 你只能向一个人布置任务 但是同一时刻可以有多个人同时执行任务

首先想到的就是贪心 用一个结构体保存 没个部下
这里发现一个问题 就是 struct 里面写了函数的话 就没法开全局数组了,必须开在函数里

之后排序,根据是 j越大的任务先安排,这是一种思维的直觉,越大的越早安排,任务执行的时间里 既可以安排其他任务 同时还可以多个任务执行

排序以后 就要算最终的时间了
顺便一提  algorithm 里有现成的 max 函数 和swap函数 其中swap函数 直接传两个参数就行

设置两个int btime 和 ans;
btime+=arr[i].b;
表示 处理到第i个数据的时候,安排用的总时间
ans=max(ans,btime+arr[i].j);
也就是说 每一次执行 要么是所有安排时间 加这一步的执行时间 要么就是上一步的时间还有剩下
#include<iostream>
#include<cstdio>
#include<algorithm>

using namespace std;
int maxn=1000+10;
struct Node{
    int b,j;
    bool operator < (const Node & n)const
    {
        return j>n.j;
    }
};



int main()
{
    Node arr[maxn];
    int n,i,ca=1;
    while(scanf("%d",&n),n)
    {
        for(i=0;i<n;++i)
        {
            scanf("%d %d",&arr[i].b,&arr[i].j);
        }
        sort(arr,arr+n);
        int btime=0,ans=0;

        for(i=0;i<n;++i)
        {
            btime+=arr[i].b;
            ans=max(ans,btime+arr[i].j);
        }
        printf("Case %d: %d\n",ca++,ans);
    }
    return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值