1.题目描述:点击打开链接
2.解题思路:本题利用贪心法解决。由于让总时间最短,因此可以先安排执行时间最长的任务,因为安排任务的总时间是无法改变的,总时间取决于执行任务的最长时间,因此应该先安排执行时间最长的任务。具体证明自己画图即可得证。
3.代码:
#define _CRT_SECURE_NO_WARNINGS #include<iostream> #include<algorithm> #include<string> #include<sstream> #include<set> #include<vector> #include<stack> #include<map> #include<queue> #include<deque> #include<cstdlib> #include<cstdio> #include<cstring> #include<cmath> #include<ctime> #include<functional> using namespace std; typedef pair<int, int> P; priority_queue<P,vector<P>, less<P> >q;//执行时间最长的先出列 int n; int main() { //freopen("t.txt", "r", stdin); int rnd = 0; while (~scanf("%d", &n)&&n) { while (!q.empty())q.pop(); int a, b; int ans = 0;//总时间 int start = 0;//开始时间 for (int i = 0; i < n; i++) { cin >> a >> b; q.push(P(b, a)); } while (!q.empty()) { P u = q.top(); q.pop(); int a = u.first, b = u.second; start += b; if (!ans)ans += a + b; if (start + a > ans)ans += (start + a - ans); } printf("Case %d: ", ++rnd); cout << ans << endl; } return 0; }
时间: 2024-10-13 16:04:45