zoukankan      html  css  js  c++  java
  • 批处理作业调度问题

    给定n个作业的集合J={J1,J2,…,Jn}。每一个作业有两项任务分别在两台机器上完成。每个作业必须先由机器1处理,再由机器2处理。作业Ji需要机器j的处理时间为tji,i=1,2,…n,j=1,2。对于一个确定的作业调度,设Fji是作业i在机器j上完成处理的时间。则所有作业在机器2上完成处理的时间和f=F21+F22+…+F2n称为该作业调度的完成时间和。

            批处理作业调度问题要求,对于给定的n个作业,制定最佳的作业调度方案,使其完成时间和最小。


    样例输入

    3
    2 1
    3 1
    2 3
    样例输出
    18
    1 3 2
    自己在纸上画画示例的图,并结合着排列数的回溯很容易写出代码

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 int n;
     4 int x[100][2];
     5 int x1[100];
     6 int x2[100];
     7 int sum1=0,sum2=0;
     8 int best=100000;
     9 int num;
    10 void swap(int &a,int &b){
    11  int temp;
    12  temp=a;
    13  a=b;
    14  b=temp;
    15 }
    16 void backtrace(int level)
    17 {
    18      if(level>n){
    19 
    20             sum1=0;
    21             sum2=0;
    22             num=0;
    23          for(int i=1;i<=n;i++){
    24                 sum1+=x[x1[i]][0];
    25                 int temp=max(sum1,sum2);
    26                 sum2=(temp+x[x1[i]][1]);
    27                 num+=sum2;
    28          }
    29          if(num<best){
    30             best=num;
    31             for(int i=1;i<=n;i++){
    32                 x2[i]=x1[i];
    33             }
    34          }
    35      }else{
    36         for(int i=level;i<=n;i++){
    37                 swap(x1[level],x1[i]);
    38                 backtrace(level+1);
    39                 swap(x1[level],x1[i]);
    40         }
    41      }
    42 }
    43 int main()
    44 {
    45     cin >> n;
    46     for(int i=1;i<=n;i++){
    47         for(int j=0;j<=1;j++){
    48             cin >> x[i][j];
    49         }
    50     }
    51     for(int i=1;i<=n;i++){
    52          x1[i]=i;
    53     }
    54     backtrace(1);
    55     cout << best << endl;
    56     for(int i=1;i<=n;i++){
    57         cout << x2[i]<< " ";
    58     }
    59     return 0;
    60 }

  • 相关阅读:
    python 可变数据类型&不可变数据类型
    java异常 总结
    java 进制转换
    在virtualbox下使用vm映像文件
    关于C语言中单双引号的问题
    php 获取今日、昨日、上周、本月的起始时间戳和结束时间戳的方法
    fastadmin model关联模型 关联查询问题
    php 解决跨域问题
    微信支付相关
    TP5之事务处理
  • 原文地址:https://www.cnblogs.com/henuliulei/p/10196118.html
Copyright © 2011-2022 走看看