HYSBZ 1061,單純形 對偶原理

2021-10-02 04:46:15 字數 1364 閱讀 2878

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

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

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

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

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

方案一:單純形

思路:設第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​,根據對偶原理將矩陣轉置後變為最大化即可

#include

#define ll long long

using

namespace std;

const

int maxn=

10005

,maxm=

1005

,inf=

1e9;

const

double eps=

1e-6

;int n,m;

double a[maxn]

[maxm]

,b[maxn]

,c[maxm]

,v;//a為約束矩陣,有n行m列,c最大化z的係數,b為限制

inline

void

pivot

(int l,

int e)

v+=c[e]

*b[l]

;for

(int j=

1;j<=m;j++)if

(j!=e) c[j]

-=c[e]

*a[l]

[j];

c[e]

=-c[e]

*a[l]

[e];

}inline

double

******x()

}int

main()

printf

("%.0f"

,******x()

);}}

方案二:最小費用流

BZOJ1061 單純形法的初探

起因是一道timus的題目 長著一副經典的線性規劃的模樣 ax b求m in c x 然而我嘗試去網路流建模 無果。當時我就考慮 為什麼乙個明顯的線性規劃問題要用網路流去擬合呢?為什麼不就用該用的方法去做呢?於是我決定學學單純形法。單純形法本身並不難理解 只是有很多名詞可能讓剛開始看的小夥伴有點為難...

單純形求解線性規劃 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 我們發現,這是乙個線性規劃方程的基本形式,基本解為 然後...

三 單純形方法(原理)

目前,運用最廣的線性規劃方法就是著名的單純形方法。這種方法是g.b.dantzig在1947年提出的。幾十年的實踐證明,單純形方法的確是一種使用方便 行之有效的重要演算法。如今,它已經成為線性規劃的中心內容。單純形法的基本思路是有選擇地取 而不是列舉所有的 基本可行解,即是從可行域的乙個頂點出發,沿...