题目链接:点击进入
题目


题意
n 个汉堡,m 个锅,每个汉堡都有做熟所需时间 t i t_i ti,一个汉堡可以在一个锅上做,也可以分两次在两个锅上做,一个锅每刻只能做一个汉堡,一个汉堡每刻只能在一个锅上。求一个汉堡放置方案,使所有汉堡做好所需时间最少( 这个所需时间,应该是所有汉堡都做完的那一刻时间 )
思路
我们求出锅的最大时间限制是多少,应该是 max ( n 个汉堡中的最长时间 ,n 个汉堡平均时间 ),我们知道一个锅最大时间是多少,剩下的就是贪心的放置汉堡,如果锅里放得下一整个汉堡,就放置,如果放不下,那就尽量放,这个汉堡剩下的那部分时间放到另一个新的锅里,重复过程,直到所有汉堡都放置结束。这样放置汉堡,一个汉堡的时间不会存在交集。因为 ti <= max,就算一个汉堡放到两个锅里,因为前半部分在锅后程,后半部分在锅前程,因此不会存在交集 ( 这里放置类似栈 )。
代码
//#pragma GCC optimize(3)//O3
//#pragma GCC optimize(2)//O2
#include<iostream>
#include<string>
#include<map>
#include<set>
//#include<unordered_map>
#include<queue>
#include<cstdio>
#include<vector>
#include<cstring>
#include<stack>
#include<algorithm>
#include<iomanip>
#include<cmath>
#include<fstream>
#define X first
#define Y second
#define best 131
#define INF 0x3f3f3f3f3f3f3f3f
#define pii pair<int,int>
#define lowbit(x) x & -x
#define inf 0x3f3f3f3f
#define int long long
//#define double long double
//#define rep(i,x,y) for(register int i = x; i <= y;++i)
using namespace std;
typedef long long ll;
typedef unsigned long long ull;

该博客探讨了一个涉及时间管理和资源优化的问题。给定一定数量的汉堡和锅,每个汉堡有不同的烹饪时间,目标是找出使所有汉堡完成烹饪所需的最短时间。博主提出了一个策略,首先确定锅的最大时间限制,然后采用贪心算法进行汉堡分配,确保每个汉堡在不增加额外等待时间的情况下完成烹饪。代码实现中包含了排序和贪心策略的细节,展示了如何将汉堡分配到锅中以达到最短总时间。
最低0.47元/天 解锁文章
206





