B - Wash HDU - 6000 结题报告

本文分享了一道关于使用贪心算法解决洗衣问题的题目,通过合理分配洗衣机和甩干机资源,找到洗完所有衣物的最短时间。文章详细解释了贪心策略的核心思想,并提供了AC代码。

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

一道贪心题,也是自己比较缺少的一种思想,在这里跟大家分享一下。

题目链接:https://vjudge.net/problem/HDU-6000

题目大意:熊猫先生洗衣服,有L件衣服,N件洗衣机,M件甩干机,且一台机器里只能有一件衣服,问你洗完衣服最短的时间。

这道题有两部分第一部分是在洗衣机里洗,第二部分是在甩干机里进行处理。

第一部分实现的是每件衣服洗完后的时间,而第二部分则实现全部洗完后的时间,这里主要提一下第二部分,把最快的部分给最后洗完的衣服(这是这道题核心的贪心思想),因为前面早洗完的甩干势必要等最后洗完的甩干,这样才是最后的完成时间,所以我们从后往前遍历,将最短时间的甩干机赋给最后一件衣服,并在过程中取最大值,因为其余衣服的所用时间必定包含在这个最长的时间中。

感觉这种思想是大部分人所缺少的,希望可以自己和大家重视!

下面给出AC代码:

#include <bits/stdc++.h>

using namespace std;
typedef long long ll;

const int maxn=1e6+10;

struct node
{
    ll v,base;
    bool operator <(const node& s) const
    {
        return v>s.v;
    }
};

ll c[maxn];

priority_queue<node> q1,q2;


int main()
{
    std::ios::sync_with_stdio(false);
    
    int T; scanf("%d",&T);
    for(int kase=1;kase<=T;kase++)
    {

        memset(c,0,sizeof(c));
        while(!q1.empty()) q1.pop();
        while(!q2.empty()) q2.pop();


        int L,N,M; scanf("%d %d %d",&L,&N,&M);

        for(int i=0;i<N;i++)
        {

           ll t; scanf("%lld",&t);
           q1.push(node{t,t});
        }

        for(int i=0;i<M;i++)
        {
            ll t; scanf("%lld",&t);
            q2.push(node{t,t});
        }


        for(int i=0;i<L;i++)
        {
            node t=q1.top(); q1.pop();
            c[i]=t.v;
            t.v+=t.base;
            q1.push(t);
        }


        ll ans=0;
        for(int i=L-1;i>=0;i--)
        {
            node t=q2.top(); q2.pop();
            ans=max(ans,t.v+c[i]);
            t.v+=t.base;
            q2.push(t);
        }


        printf("Case #%d: %lld\n",kase,ans);
    }
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值