ZOJ 1012 Mainframe

  题目大意:有一台主机,有m个cpu和n的内存,有l个任务,每个任务需消耗一定的cpu和内存,给出任务的开始时间和截止时间,完成任务可获得一定的金钱,同时提前完成有奖金,延后完成要扣钱。计算到某个时间所得收入。

  首先按照任务的开始时间和价值进行排序,然后就是模拟题目描述的过程了。

 1 #include <cstdio>
 2 #include <cstring>
 3 #include <algorithm>
 4 using namespace std;
 5 #define MAXN 10000+10
 6 
 7 struct Job
 8 {
 9     int a, b;
10     int t, u;
11     int v, w, x;
12     bool operator < (const Job& x) const
13     {
14         if (t != x.t)   return t < x.t;
15         else return v > x.v;
16     }
17 };
18 Job jobs[MAXN];
19 bool finish[MAXN];
20 
21 int main()
22 {
23 #ifdef LOCAL
24     freopen("in", "r", stdin);
25 #endif
26     int F, M, N, L;
27     int kase = 0;
28     while (scanf("%d", &F) != EOF && F)
29     {
30         scanf("%d%d%d", &M, &N, &L);
31         for (int i = 0; i < L; i++)
32             scanf("%d%d%d%d%d%d%d", &jobs[i].a, &jobs[i].b, &jobs[i].t, &jobs[i].u, &jobs[i].v, &jobs[i].w, &jobs[i].x);
33         sort(jobs, jobs+L);
34         memset(finish, 0, sizeof(finish));
35         int income = 0;
36         for (int i = 0; i < F; i++)
37         {
38             int cpu = M, mem = N;
39             for (int j = 0; j < L; j++)
40             {
41                 if (jobs[j].t > i)   break;
42                 if (!finish[j] && cpu >= jobs[j].a && mem >= jobs[j].b)
43                 {
44                     cpu -= jobs[j].a;
45                     mem -= jobs[j].b;
46                     finish[j] = true;
47                     income += jobs[j].v;
48                     int t = i + 1;  // the finished time
49                     if (t < jobs[j].u)   income += jobs[j].w * (jobs[j].u-t);
50                     if (t > jobs[j].u)   income -= jobs[j].x * (t-jobs[j].u);
51                 }
52             }
53         }
54         for (int i = 0; i < L; i++)
55             if (!finish[i] && jobs[i].u <= F)
56                 income -= jobs[i].x * (F - jobs[i].u);
57         printf("Case %d: %d

", ++kase, income);
58     }
59     return 0;
60 }
View Code
原文地址:https://www.cnblogs.com/xiaobaibuhei/p/3257276.html