UOJ 179 線性規劃 線性規劃

2021-09-07 19:10:42 字數 3365 閱讀 1292

這是一道模板題。

(這個題現在標程掛了。。哪位哥哥願意提供一下靠譜的標程呀?)

本題中你需要求解乙個標準型線性規劃:

有 nn 個實數變數 x1,x2,…,xn

x1,x2,…,xn 和 m

m 條約束,其中第 i

i 條約束形如 ∑nj=1aijxj≤bi

∑j=1naijxj≤bi。

此外這 n

n 個變數需要滿足非負性限制,即 xj≥0

xj≥0。

在滿足上述所有條件的情況下,你需要指定每個變數 xj

xj 的取值,使得目標函式 f=∑nj=1cjxj

f=∑j=1ncjxj 的值最大。

第一行三個正整數 n,m,t

n,m,t。其中 t∈

t∈。第二行有 n

n 個整數 c1,c2,⋯,cn

c1,c2,⋯,cn,整數間均用乙個空格分隔。

接下來 m

m 行,每行代表一條約束,其中第 i

i 行有 n+1

n+1 個整數 ai1,ai2,⋯,ain,bi

ai1,ai2,⋯,ain,bi,整數間均用乙個空格分隔。

如果不存在滿足所有約束的解,僅輸出一行 "infeasible"。

如果對於任意的 m

m,都存在一組解使得目標函式的值大於 m

m,僅輸出一行"unbounded"。

否則,第一行輸出乙個實數,表示目標函式的最大值 f

f。當第一行與標準答案的相對誤差或絕對誤差不超過 10−6

10−6,你的答案被判為正確。

如果 t=1

t=1,那麼你還需要輸出第二行,用空格隔開的 n

n 個非負實數,表示此時 x1,x2,…,xn

x1,x2,…,xn 的取值,如有多組方案請任意輸出其中乙個。

判斷第二行是否合法時,我們首先檢驗 f−∑nj=1cjxj

f−∑j=1ncjxj 是否為 0

0,再對於所有 i

i,檢驗 min

min 是否為 0

0。檢驗時我們會將其中大於 0

0 的項和不大於 0

0 的項的絕對值分別相加得到 s+

s+ 和 s−

s−,如果 s+

s+ 和 s−

s− 的相對誤差或絕對誤差不超過 10−6

10−6,則判為正確。

如果 t=0

t=0,或者出現 infeasible 或 unbounded 時,不需要輸出第二行。

input

2 2 1

1 12 1 6

-1 2 3

output
4.2

1.8 2.4

explanation

兩條約束分別為 2x1+x2≤6,−x1+2x2≤3

2x1+x2≤6,−x1+2x2≤3。

當 x1=1.8,x2=2.4

x1=1.8,x2=2.4 時目標函式 x1+x2

x1+x2 取到最大值 4.2

4.2。

input

2 2 1

1 -1

1 1 4

-1 -2 -2

output
4.0

4.0 0.0

explanation

注意 xj≥0

xj≥0 的限制。

input

3 3 1

0 0 1

-2 1 0 -4

1 1 0 4

1 -2 0 -4

output
infeasible
input
2 1 1

0 11 0 1

output
unbounded
對於所有資料,1≤n,m≤20

1≤n,m≤20,0≤|aij|,|bi|,|cj|≤100

0≤|aij|,|bi|,|cj|≤100,t∈

t∈。

本題包含 4 個子任務,每個 25 分。

子任務 1,3 滿足 bi≥0

bi≥0。

子任務 2,4 沒有特殊限制。

子任務 1,2 中 t=0

t=0。

子任務 3,4 中 t=1

t=1。

時間限制:1s1s

空間限制:256mb

256mb

線性規劃貌似在必修五有啊qwq不過還沒學到估計也不會講單純形演算法吧

感覺線性規劃是差分約束的公升級版??

如果想學的話建議看2023年隊爺的**《**線性規劃在資訊學競賽中的應用》

不過為啥a不了啊

#include#include

#include

using

namespace

std;

const

int maxn = 51, inf = 1e9 + 10

;const

double eps = 1e-8

;inline

intread()

while(c >= '

0' && c <= '9')

return x *f;

}int

n, m, opt;

intid[maxn];

double

ans[maxn], a[maxn][maxn];

void pivot(int l, int

e) }

//帶入的過程就是消去非基變數

}bool

init()

//這裡所有的xi都是正的,而bi是負的,這與鬆弛型相矛盾

pivot(l, e);

}return1;

}bool

******x()

if(!e) break

;

for(int i = 1; i <= m; i++)

if(a[i][e] > eps && a[i][0] / a[i][e] mn = a[i][0] / a[i][e], l = i;//

找到下界最緊的鬆弛

if(!l)

pivot(l, e);

}return1;

}int

main()

for(int i = 1; i <= n; i++) id[i] =i;

if(init() &&******x())

}return0;

}/*3 3 1

3 1 2

1 1 3 30

2 2 5 24

4 1 2 36

*/

UOJ 179 線性規劃 線性規劃

這是一道模板題。這個題現在標程掛了。哪位哥哥願意提供一下靠譜的標程呀?本題中你需要求解乙個標準型線性規劃 有 nn 個實數變數 x1,x2,xn x1,x2,xn 和 m m 條約束,其中第 i i 條約束形如 nj 1aijxj bi j 1naijxj bi。此外這 n n 個變數需要滿足非負性...

UOJ 179 線性規劃(單純形)

傳送門 題解 雖然標程掛了,不過還是勉強能用的。初始條件 max jc jaj jai,jxj bjxi 0max j cjaj jai jxj bjx i 0最優化過程 假設一開始滿足所有bj 0b j 0。1.找到ci c i為正數的xi x i。2.找到bj xj,i b jx j,i最小的j...

uoj 179 線性規劃 單純形法 模板

題目大意 這是一道模板題。本題中你需要求解乙個標準型線性規劃 有n個實數變數x1,x2,xn和m條約束,其中第i條約束形如aij xj bi j 1,n i 1,m 此外這n個變數需要滿足非負性限制,即xj 0。在滿足上述所有條件的情況下,你需要指定每個變數xj的取值,使得目標函式f cj xj j...