传送门

鉴于志愿者招募那题我是用网络流写的所以这里还是写一下单纯形好了……

就是要我们求这么个线性规划(\(d_{ij}\)表示第\(i\)种志愿者在第\(j\)天能不能服务,\(x_i\)表示第\(i\)种志愿者选的数量,\(c_i\)表示第\(i\)种志愿者的价格,\(k_j\)表示第\(j\)天需要的志愿者数目,\(n\)表示志愿者总数,\(m\)表示天数)

\[Min\sum_{i=1}^nc_ix_i
\]

\[\sum_{i=1}^nd_{ij}x_i\geq k_j
\]

\[x_i\geq 0
\]

这个线性规划是求最小值,把它对偶一下转为求最大值(令\(y_i\)表示对偶之后的第\(i\)个式子)

\[Max\sum_{j=1}^m k_jy_j
\]

\[\sum_{j=1}^md_{ij}y_j\leq c_i
\]

\[y_j\geq 0
\]

那么直接单纯形求解即可

ps:然而论文里看到这题实际上用单纯形是错的,因为原题可以保证最优解是整数然而这题不行,比方说有三种志愿者分别是时间\([1,1],[3,3]\),代价\(1\),时间\([1,1],[2,2]\),代价\(1\),时间\([2,2],[3,3]\),代价\(1\),最优解是三个志愿者各招募\(0.5\)个,然而这是不可能的

pps:有些大佬似乎用费用流写的……不过我暂时还不会线性规划的网络流建图所以看不太懂……

//minamoto
#include<bits/stdc++.h>
#define R register
#define inf 1e18
#define fp(i,a,b) for(R int i=a,I=b+1;i<I;++i)
#define fd(i,a,b) for(R int i=a,I=b-1;i>I;--i)
#define go(u) for(int i=head[u],v=e[i].v;i;i=e[i].nx,v=e[i].v)
using namespace std;
char buf[1<<21],*p1=buf,*p2=buf;
inline char getc(){return p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<21,stdin),p1==p2)?EOF:*p1++;}
int read(){
R int res,f=1;R char ch;
while((ch=getc())>'9'||ch<'0')(ch=='-')&&(f=-1);
for(res=ch-'0';(ch=getc())>='0'&&ch<='9';res=res*10+ch-'0');
return res*f;
}
const int N=10005,M=1005;const double eps=1e-8;
double a[N][M];int n,m,k,l,r;
void pivot(int l,int e){
double t=a[l][e];a[l][e]=1;fp(i,0,m)a[l][i]/=t;
fp(i,0,n)if(i!=l&&fabs(a[i][e])>eps){
t=a[i][e],a[i][e]=0;
fp(j,0,m)a[i][j]-=t*a[l][j];
}
}
void simplex(){
while(true){
int l=0,e=0;double mn=inf;
fp(i,1,m)if(a[0][i]>eps){e=i;break;}if(!e)return;
fp(i,1,n)if(a[i][e]>eps&&a[i][0]/a[i][e]<mn)mn=a[i][0]/a[i][e],l=i;
pivot(l,e);
}
}
int main(){
// freopen("testdata.in","r",stdin);
m=read(),n=read();fp(i,1,m)a[0][i]=read();
fp(i,1,n){
k=read();
while(k--){
l=read(),r=read();fp(j,l,r)++a[i][j];
}a[i][0]=read();
}simplex();printf("%.0lf\n",-a[0][0]);return 0;
}

bzoj3265: 志愿者招募加强版(线性规划+单纯形法)的更多相关文章

  1. BZOJ3265: 志愿者招募加强版(线性规划)

    Time Limit: 20 Sec  Memory Limit: 512 MBSubmit: 809  Solved: 417[Submit][Status][Discuss] Descriptio ...

  2. 突然想看单纯形 BZOJ3265 志愿者招募加强版

    本来的版本是可以差分之后建图利用网络流,这个题是板子题,就当存个板子,嘻嘻嘻 讲解可以到卿学姐的算法讲堂 https://www.bilibili.com/video/av7847726?from=s ...

  3. BZOJ 3265 志愿者招募加强版(单纯形)

    3265: 志愿者招募加强版 Time Limit: 20 Sec  Memory Limit: 512 MBSubmit: 848  Solved: 436[Submit][Status][Disc ...

  4. 【BZOJ1061/3265】[Noi2008]志愿者招募/志愿者招募加强版 单纯形法

    [BZOJ1061][Noi2008]志愿者招募 Description 申奥成功后,布布经过不懈努力,终于成为奥组委下属公司人力资源部门的主管.布布刚上任就遇到了一个难题:为即将启动的奥运新项目招募 ...

  5. 【BZOJ 1061】 1061: [Noi2008]志愿者招募 (线性规划与网络流)**

    1061: [Noi2008]志愿者招募 Description 申奥成功后,布布经过不懈努力,终于成为奥组委下属公司人力资源部门的主管.布布刚上任就遇到了一个难 题:为即将启动的奥运新项目招募一批短 ...

  6. BZOJ 3265: 志愿者招募加强版 [单纯形法]

    传送门 一个人多段区间,一样.... 不过国家队论文上说这道题好像不能保证整数解.... #include <iostream> #include <cstdio> #incl ...

  7. BZOJ.3265.志愿者招募加强版(费用流SPFA)

    题目链接 见上题. 每类志愿者可能是若干段,不满足那个...全幺模矩阵(全单位模矩阵)的条件,所以线性规划可能存在非整数解. 于是就可以用费用流水过去顺便拿个rank2 233. //20704kb ...

  8. BZOJ 1061 志愿者招募 最小费用流&&线性规划建模

    题目链接: https://www.lydsy.com/JudgeOnline/problem.php?id=1061 题目大意: 申奥成功后,布布经过不懈努力,终于成为奥组委下属公司人力资源部门的主 ...

  9. BZOJ 1061: [Noi2008]志愿者招募(线性规划与网络流)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1061 题意: 思路: 直接放上大神的建模过程!!!(https://www.byvoid.com/z ...

随机推荐

  1. uva 1364

    刘书上例题 #include <cstdio> #include <cstdlib> #include <cmath> #include <set> # ...

  2. 框架-弹出选择框(Jquery传递Json数组)

    给一个button按钮,执行方法 Json传值$("body").on("click", "#btnsure", function() {  ...

  3. python字符串连接方法效率比较

    方法1:直接通过加号(+)操作符连接 1 website = 'python' + 'tab' + '.com' 方法2:join方法 1 2 listStr = ['python', 'tab',  ...

  4. 偏差-方差分解Bias-Variance Decomposition

    转自: http://www.cnblogs.com/jmp0xf/archive/2013/05/14/Bias-Variance_Decomposition.html

  5. CSS浮动通俗讲解

    首先要知道,div是块级元素,在页面中独占一行,自上而下排列,也就是传说中的流.如下图: 可以看出,即使div1的宽度很小,页面中一行可以容下div1和div2,div2也不会排在div1后边,因为d ...

  6. ThoughtWorks技术雷达

    ThoughtWorks技术雷达 技术成熟方案的一个推荐网站.

  7. 盘点UML中的四种关系

    生活中,我们既是独立的个体,又通过联系形成各种关系,比方说:朋友.恋人.父子,同学--于是乎,出现了神乎其神的六人定律. 那么在UML中又存在什么样的关系呢?以下我们来梳理一下. 关联(Associa ...

  8. centos 安装mysql时错误unknown variable &#39;defaults-file=/opt/redmine-2.6.0-2/mysql/my.cnf&#39;

    找到my.cnf所在目录.运行 chmod 664 my.cnf,再启动mysql成功

  9. 大话设计模式C++实现-第14章-观察者模式

    一.UML图 关键词:Subject维护一个Observer列表.Subject运行Notify()时就运行列表中的每一个Observer的Update(). 二.概念 观察者模式:定义了一种一对多的 ...

  10. oracle 12c 13姨

    搞了一下oracle 12c.有些体会还是先记下来. 12c搞搞新意思,弄了个CDB(容器数据库,可不是商务中心CBD哟)和PDB(可插拔数据库).PDB插在CDB里. 简单而言,CDB就是一个数据库 ...