zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    vue:路由实现原理
    webpack自定义loader和自定义插件
    JS常见的算法
    浅析DES、AES、RSA、MD5加密算法及其应用场景
    关于JSON.parse(JSON.stringify(obj))实现深拷贝应该注意的坑
    Canvas和SVG区别
    解决 webpack 打包文件体积过大
    箭头函数与普通函数的区别
    2.Linux基础命令
    1.Ubuntu系统与vmware虚拟机的安装与使用
  • 原文地址:https://www.cnblogs.com/xiaobaibuhei/p/3257276.html
Copyright © 2011-2022 走看看