zoukankan      html  css  js  c++  java
  • bzoj1061题解

    【解题思路】

      设类型i的志愿者,即第Si天~第Ti天工作的志愿者,共招募xi个,于是有不等式组Σxj≥Ai(Sj≤i≤Tj)。

      这样,题目就变成了求一组满足一次不等式组的xi,使ΣCixi最小,即标准的线性规划形式。

      本人比较懒。。并不想建图跑费用流之类的。。于是写了单纯形。。复杂度O(松)。

    【参考程序】

     1 #pragma GCC optimize(2)
     2 #include <cmath>
     3 #include <cstdio>
     4 #include <cstring>
     5 #define REP(i,low,high) for(register int i=(low);i<=(high);i++)
     6 #define INF 1e10
     7 #define eps 1e-7
     8 using namespace std;
     9 inline bool getmin(double &tar,const double &pat) {return pat+eps<tar?tar=pat,1:0;}
    10 double a[1010][10010]; int m,n;
    11 inline int check() {REP(i,1,m) if(a[i][0]>eps) return i; return 0;}
    12 inline double Simplex()
    13 {
    14     while(int x=check())
    15     {
    16         int y=0; double lim=INF; REP(i,1,n) if(a[x][i]>eps&&getmin(lim,a[0][i]/a[x][i])) y=i;
    17         if(!y) return a[0][0]=INF; double p=1.0/a[x][y]; a[x][y]=1.0; REP(i,0,m) a[i][y]*=p;
    18         REP(i,1,n) if(i!=y)
    19         {
    20             double now=a[x][i];
    21             if(fabs(now)>eps) {a[0][i]-=now*a[0][y]; REP(j,1,m) a[j][i]-=now*a[j][y]; a[x][i]=-now*p;}
    22         }
    23         double now=a[x][0]; a[0][0]+=now*a[0][y]; REP(i,1,m) a[i][0]-=now*a[i][y]; a[x][0]=-now*p;
    24     }
    25     return a[0][0];
    26 }
    27 int main()
    28 {
    29     scanf("%d%d",&m,&n); REP(i,1,m) scanf("%lf",&a[i][0]);
    30     REP(i,1,n) {int S,T; scanf("%d%d",&S,&T); REP(j,S,T) a[j][i]=1.0; scanf("%lf",&a[0][i]);}
    31     return printf("%.0lf
    ",Simplex()+eps),0;
    32 }
    View Code
  • 相关阅读:
    Django的日志操作,记录一下自己的使用
    初学jupyter 与爬虫
    mysql的库名或者表名带空格不能删除的问题
    Linux的vim命令的快捷键
    DjangoORM相关(多表操作)
    DjangoORM相关(单表操作)
    Django模板
    Django URL相关
    Monkeyrunner学习记录之运行模拟器
    Monkeyrunner学习记录之环境搭建
  • 原文地址:https://www.cnblogs.com/spactim/p/6623128.html
Copyright © 2011-2022 走看看