zoukankan      html  css  js  c++  java
  • lingo 练习3

    简介

    练习

    question

    有一个护士工作站点,每天(周一至周日)所需最少职员数量20,16,13,16,19,14,和12,并要求每个职员一周连续工作5天,试求每周所需最少职员数,并给出安排。

    code

    model:
    sets:
    days/mon..sun/:r,x;
    indexs/1..5/:index;
    endsets
    data:
    r=20 16 13 16 19 14 12; ! 每天所需的最少的职员数量;
    enddata
    min=@sum(days: x); !最小化每周所需要的的职员数量;
    @for(days(i):@sum(indexs(j):x(@wrap(i-j+1, 7))) >= r(i));
    @for(days:@gin(x));!约束x为整数变量;
    end

    answer

                            X( MON)        8.000000            1.000000
                            X( TUE)        2.000000            1.000000
                            X( WED)        0.000000            1.000000
                            X( THU)        6.000000            1.000000
                            X( FRI)        3.000000            1.000000
                            X( SAT)        3.000000            1.000000
                            X( SUN)        0.000000            1.000000
    

    自问自答环节~~

    wrap的使用方式?

    wrap(i-j+1, 7) 返回 1 - 7 之间的内容, 比如, i = 1, j = 4, i - j + 1 = -2 --> 5 就像一个环 
    

    校验结果

    MON 安排了8个人,往前再倒推4天就是MON上班的人数
    8 + 0 + 3 + 3 + 6 = 20 >= 20; bingo
    TWO 安排了2个人,往前在倒推4天就是TWO上班的人数
    2 + 8 + 0 + 3 + 3 = 22 >= 16; bingo
    再校验一个结果
    SUN 安排了0个人,往前再倒推4天就是SUN上班的人数
    0 + 3 + 3 + 6 + 0 >=12; bingo

    Hope is a good thing,maybe the best of things,and no good thing ever dies.----------- Andy Dufresne
  • 相关阅读:
    PHP压缩html网页代码 : 清除空格,制表符,注释标记
    CentOS 编译 Nginx 服务
    Fedora 下安装Fcitx输入法
    SVN 脚本
    Linux 在线播放
    Linux命令行下常用svn命令
    linux vi(vim)常用命令汇总
    MySQL修改root密码
    Fedora 查看CHM帮助文档
    Fedora 快捷键
  • 原文地址:https://www.cnblogs.com/eat-too-much/p/13303646.html
Copyright © 2011-2022 走看看