HYSBZ 1061,線性規劃轉最小費用流

2021-10-02 04:58:53 字數 2412 閱讀 7527

申奧成功後,布布經過不懈努力,終於成為奧組委下屬公司人力資源部門的主管。布布剛上任就遇到了乙個難

題:為即將啟動的奧運新專案招募一批短期志願者。經過估算,這個專案需要n 天才能完成,其中第i 天至少需要

ai 個人。 布布通過了解得知,一共有m 類志願者可以招募。其中第i 類可以從第si 天工作到第ti 天,招募費用

是每人ci 元。新官上任三把火,為了出色地完成自己的工作,布布希望用盡量少的費用招募足夠的志願者,但這

並不是他的特長!於是布布找到了你,希望你幫他設計一種最優的招募方案。

思路1:最小費用流

設第i類人招募了xi個,aij表示第i個人第j天是否工作,工作為1,不工作為0,則應滿足對於所有j,∑in

aijx

i>=a

j\sum_i^na_x_i >= a_j

∑in​ai

j​xi

​>=a

j​,需要最小化z=∑

1nci

xi

z=\sum_1^nc_ix_i

z=∑1n​

ci​x

i​,對於第j天的不等式∑in

aijx

i>=a

j\sum_i^na_x_i >= a_j

∑in​ai

j​xi

​>=a

j​在左側減去乙個p[j]得到∑in

aijx

i−p[

j]=a

j\sum_i^na_x_i -p[j]= a_j

∑in​ai

j​xi

​−p[

j]=a

j​,對於將任意兩個相鄰的等式相減可以得到n+1個等式,並且x

ix_i

xi​將在第l[i]個等式處取正,在r[i]+1號等式處取負,p[j]將在第j+1個等式處取正,在第j個等式處取負,故對於第i個人,連一條(l[i],r[i],inf,c[i])的邊,對於相鄰的兩個等式連一條(i-1,i,inf,0)的邊,最後根據aj−

aj−1

a_j-a_

aj​−aj

−1​的正負來決定源點和匯點的邊,然後跑最小費用最大流即可

#include

#include

#include

#include

#include

#define maxn 10010

#define maxm 40010

using

namespace std;

const

int inf =

0x3f3f3f3f

;int tot,head[maxn]

,cnt;

struct edge

edg[maxm<<1]

;inline

void

addedg

(int u,

int v,

int c,

int w)

inline

void

add(

int u,

int v,

int c,

int w)

int vis[maxn]

,d[maxn]

,pre[maxn]

,path[maxn]

,cost;

//d用來存最短路,pre用來存路徑,path用來存用了哪條邊,cost用來儲存最小費用

inline

bool

spfa

(int st,

int ed)}}

}return pre[ed]!=-

1;}inline

intmincostmaxflow

(int st,

int ed)

// if(d[ed] >= 0) //保證費用最小,去掉後保證流量最大

// break;

flow +

= minn;

cost +

= minn * d[ed];}

return flow;

}inline

void

init()

struct node

nod[maxn]

;int n,m,a[maxn]

;int

main()

a[0]

= a[n+1]

=0;for

(int i =

1;i <= n+1;

++i)

mincostmaxflow

(s,t)

;printf

("%d\n"

,cost);}

return0;

}

思路2:單純形

bzoj1061 線性規劃

線性規劃裸題。根據題目很容易可以得到線性規劃方程 以樣例為例 min 2 x1 5 x2 2 x3 x1 0 0 2 x1 x2 0 3 0 x2 x3 4 x1,x2,x3 0 再將方程對偶,得到 max 2 x1 3 x2 4 x3 x1 x2 0 2 0 x2 x3 5 0 0 x3 2 x1...

HYSBZ 1061,單純形 對偶原理

申奧成功後,布布經過不懈努力,終於成為奧組委下屬公司人力資源部門的主管。布布剛上任就遇到了乙個難 題 為即將啟動的奧運新專案招募一批短期志願者。經過估算,這個專案需要n 天才能完成,其中第i 天至少需要 ai 個人。布布通過了解得知,一共有m 類志願者可以招募。其中第i 類可以從第si 天工作到第t...

單純形求解線性規劃 BZOJ1061

推薦一篇 我們設xi為第i個志願者的招募次數,以樣例為例,則不難列出如下的線性規劃方程 minx1 0 0 2 x1 x2 0 3 0 x2 x3 4 那麼,根據 這個方程等價於 maxx1 x2 0 2 0 x2 x3 5 0 0 x3 2 我們發現,這是乙個線性規劃方程的基本形式,基本解為 然後...