你现在要洗L件衣服。你有n台洗衣机和m台烘干机。由于你的机器非常的小,因此你每次只能洗涤(烘干)一件衣服。第i台洗衣机洗一件衣服需要wi分钟,第i台烘干机烘干一件衣服需要di分钟。请问把所有衣服洗干净并烘干,最少需要多少时间?假设衣服在机器间转移不需要时间,并且洗完的衣服可以过一会再烘干L<=10^6,N<=10^5,M<=10^5
显然洗衣服是贪心的能洗就洗,这样的话可以预处理每件衣服最少用多少时间洗完
由于需要最小化时间,所以将洗得慢的衣服和烘干的快的烘干机进行配对,一定是最优解


1 #include "bits/stdc++.h" 2 using namespace std; 3 const int N = 1e6 + 10; 4 typedef long long ll; 5 ll a[N], ans; 6 priority_queue<pair<ll, ll>, vector<pair<ll, ll> >, greater<pair<ll, ll> > > p1, p2; 7 int main() { 8 int L, n, m; 9 scanf("%d%d%d", &L, &n, &m); 10 for(int i = 1, x ; i <= n ; ++ i) scanf("%d", &x), p1.push(make_pair(x, x)); 11 for(int i = 1, x ; i <= m ; ++ i) scanf("%d", &x), p2.push(make_pair(x, x)); 12 for(int i = 1 ; i <= L ; ++ i) { 13 a[i] = p1.top().first; ll t = p1.top().second; 14 p1.pop(); 15 p1.push(make_pair(a[i] + t, t)); 16 } 17 for(int i = L ; i ; -- i) { 18 ll x = p2.top().first, y = p2.top().second; p2.pop(); 19 ans = max(ans, a[i] + x); 20 p2.push(make_pair(x + y, y)); 21 } 22 printf("%lld\n", ans); 23 }