L件衣服,N个洗衣机,M个烘干机。每个洗衣机和烘干机都有自己工作所需的时间,问洗完并烘干完所有衣服的最短时间。
** 收获:具有相互影响的问题应该尝试寻找其中互不影响的问题,是否能从互不影响的问题中探寻答案。
参考博客:链接
先用优先队列处理处洗完和烘干完每件衣服所需的最少时间,之后两个过程其实是相互独立的(这一点想了好久,贪心的选择时间最短的那一对就好)
#include
using namespace std;
#define int long long
const int N = 1e6+25;
int b[N];
struct node
{
int base,next;
node(){}
node (int base,int next):base(base),next(next){}
bool operator <(const node& tmp)const
{
return next>tmp.next;
}
};
main()
{
ios::sync_with_stdio(false);
int t,l;
cin>>t;
int cases = 0;
while(t--)
{
cases++;
int n,m;
priority_queuep,q;
cin>>l>>n>>m;
int v;
for(int i=1;i<=n;i++)
{
cin>>v;
p.push(node(v,v));
}
for(int i=1;i<=l;i++)
{
node tmp = p.top();
p.pop();
b[i] = tmp.next;
p.push(node(tmp.base,tmp.next+tmp.base));
}
for(int i=1;i<=m;i++)
{
cin>>v;
q.push(node(v,v));
}
int ans = 0;
for(int i=l;i>=1;i--)
{
node tmp = q.top();
q.pop();
ans = max(ans,b[i]+tmp.next);
q.push(node(tmp.base,tmp.base+tmp.next));
}
cout<<"Case #"<": "<