zoukankan      html  css  js  c++  java
  • 搜索与回溯 5.6

    题目叙述:
    设有A,B,C,D,E 5人从事j1,j2,j3,j4,j5 5项工作每人只能从事一项,它们的效益表如下: 
    j1 j2 j3 j4 j5
    A 13 11 10 4 7
    B 13 10 10 8 5
    C 5 9 7 7 4
    D 15 12 10 11 5
    E 10 11 8 8 4
    求最佳安排,使效益最高。


    这是一道水题

    此题先将数组f都设为false(没做)。

    然后搜索里判断是否已经做完,如做完就将此次的效率取大值,再将没人做的任务存放起来。

    然后因为此题只有5个任务,所以直接for i:=1 to 5判断每一种情况,如果if f[i]=true就是这个任务已经有人做了,就不用判断。如果这个任务没人做过,就进行下一次的搜索。

    最后再将每人做什么任务,和最终的效率求出来即可。

    代码如下:

    const a:array[1..5,1..5]of longint=((13,11,10,4,7),(13,10,10,8,5),(5,9,7,7,4),(15,12,10,11,5),(10,11,8,8,4));
    var maxl,y:array[1..5]of longint;
        f:array[1..5]of boolean;
        ans,i:longint;
    
    procedure dfs(l,x:longint);
    var  i:longint;
    begin
      if l>5 then
        begin
          if x>ans then begin ans:=x; maxl:=y; end;
          exit;
        end;
      for i:=1 to 5 do
        if f[i]=false then
          begin
            y[l]:=i;
            f[i]:=true;
            dfs(l+1,x+a[l,i]);
            f[i]:=false;
          end;
    end;
    
    begin
      fillchar(f,sizeof(f),false);
      dfs(1,0);
      for i:=1 to 5 do write(chr(i+64),': J',maxl[i],' ');
      writeln;
      write(ans);
    end.
  • 相关阅读:
    连续时间单位冲激信号δ(t)的基本性质
    数据结构练习
    数据结构练习
    数据结构练习
    使用 matplotlib 绘制带日期的坐标轴
    数据结构练习
    c++ primer 练习10.33_p363
    C++迭代器之'插入迭代器
    C++ 11 Lambda表达式
    《C++ Primer》读书笔记—第十章 泛型算法
  • 原文地址:https://www.cnblogs.com/Comfortable/p/8412476.html
Copyright © 2011-2022 走看看