這是一道模板題。
(這個題現在標程掛了。。哪位哥哥願意提供一下靠譜的標程呀?)
本題中你需要求解乙個標準型線性規劃:
有 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 1output1 12 1 6
-1 2 3
4.2explanation1.8 2.4
兩條約束分別為 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 1output1 -1
1 1 4
-1 -2 -2
4.0explanation4.0 0.0
注意 xj≥0
xj≥0 的限制。
input
3 3 1output0 0 1
-2 1 0 -4
1 1 0 4
1 -2 0 -4
infeasibleinput
2 1 1output0 11 0 1
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...