bzoj 5088 Wash

你现在要洗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 }
bzoj 5088 Wash

 

posted @ 2018-08-23 21:31  KingSann  阅读(178)  评论(0)    收藏  举报