zoukankan      html  css  js  c++  java
  • COGS——T 1168. 机器调度

    http://www.cogs.pro/cogs/problem/problem.php?pid=1168

    ★★   输入文件:machine.in   输出文件:machine.out   简单对比
    时间限制:1 s   内存限制:128 MB

    【问题描述】

        我们知道机器调度是计算机科学中一个非常经典的问题。调度问题有很多种,具体条件不同,问题就不同。现在我们要处理的是两个机器的调度问题。

        有两个机器A和B。机器A有n种工作模式,我们称之为mode_0,mode_l,……,mode_n-1。同样,机器B有m种工作模式,我们称之为mode_0,mode_1,……,mode_m-1。初始时,两台机器的工作模式均为mode_0。现在有k个任务,每个工作都可以在两台机器中任意一台的特定的模式下被加工。例如,job0能在机器A的mode_3或机器B的mode_4下被加工,jobl能在机器A的mode_2或机器B的mode_4下被加工,等等。因此,对于任意的jobi,我们可以用三元组(i,x,y)来表示jobi在机器A的mode_x或机器B的mode_y下被加工。

        显然,要完成所有工作,我们需要不时的改变机器的工作模式。但是,改变机器的工作状态就必须重启机器,这是需要代价的。你的任务是,合理的分配任务给适当的机器,使机器的重启次数尽量少。

    【输入】

    第一行三个整数n,m(n,m<100),k(k<1000)。接下来的k行,每行三个整数i,x,y。

    【输出】

    只一行一个整数,表示最少的重启次数。

    【样例】

    machine.in                   machine.out

    5 5 10                       3

    0 1 1

    1 1 2

    2 1 3

    3 1 4

    4 2 1

    5 2 2

    6 2 3

    7 2 4

    8 3 3

    9 4 3

    好像做过呃呃呃、、

     1 #include <cstring>
     2 #include <cstdio>
     3  
     4 int n,m,k,ans;
     5 bool vis[110];
     6 int map[110][110],match[110];
     7  
     8 bool find(int u)
     9 {
    10     for(int v=1;v<=m;v++)
    11         if(!vis[v]&&map[u][v])
    12         {
    13             vis[v]=1;
    14             if(!match[v]||find(match[v]))
    15             {
    16                 match[v]=u;
    17                 return true;
    18             }
    19         }
    20     return false;
    21 }
    22  
    23 inline void read(int &x)
    24 {
    25     x=0; register char ch=getchar();
    26     for(;ch>'9'||ch<'0';) ch=getchar();
    27     for(;ch>='0'&&ch<='9';ch=getchar()) x=x*10+ch-'0';
    28 }
    29  
    30 int AC()
    31 {
    32     freopen("machine.in","r",stdin);
    33     freopen("machine.out","w",stdout);
    34     
    35     read(n),read(m),read(k);
    36     for(int u,v,a;k--;map[u][v]=1)
    37         read(a),read(u),read(v);
    38     for(int i=1;i<=n;i++)
    39     {
    40         memset(vis,0,sizeof(vis));
    41         if(find(i)) ans++;
    42     }
    43     printf("%d
    ",ans);
    44     return 0;
    45 }
    46  
    47 int Hope=AC();
    48 int main(){;}
    ——每当你想要放弃的时候,就想想是为了什么才一路坚持到现在。
  • 相关阅读:
    JavaScript | 闭包
    Photoshop | 快速抠头发(调整边缘/选择并遮住)
    JavaScript | 基础表单验证(纯Js)
    JavaScript | 事件
    JavaScript | 数组
    JavaScript | 对象与属性
    JavaScript | 基础(变量/引用/转换/函数)
    Altium Designer 10 | 常用库及部分元件名中英文对照表
    电路 | 基本概念
    读点什么 |《把时间当作朋友》李笑来
  • 原文地址:https://www.cnblogs.com/Shy-key/p/7467761.html
Copyright © 2011-2022 走看看