差分约束系统——建模与求解
?如果一個(gè)系統(tǒng)由n個(gè)變量和m個(gè)約束條件組成,其中每個(gè)約束條件形如:xj-xi<=bk,其中,1<=i,j<=n, 1<=k<=m。則稱其為差分約束系統(tǒng)(System of difference constraints)。差分約束系統(tǒng)就是求解關(guān)于一組變量的不等式組的方法。
??? 求解差分約束系統(tǒng),可以轉(zhuǎn)化為圖論中的單源最短路徑問題。
??? 觀察約束條件xj-xi<=bk,會(huì)發(fā)現(xiàn)它類似于最短路中的三角不等式d[u]<=d[v]+w[u,v](即d[u]-d[v]<=w[u,v])。因此,以每個(gè)變量xi為結(jié)點(diǎn),對(duì)于約束條件xj-xi<=bk,連接一條邊(i,j),邊權(quán)為bk。再增加一個(gè)源點(diǎn)s,s與所有的點(diǎn)相連,邊權(quán)為0。對(duì)這個(gè)圖,運(yùn)行以s為起點(diǎn)的bellman-ford(或者spfa),最終{d[i]}即為一組可行解。
引理:設(shè)x=(x1,x2,…,xn)是差分約束系統(tǒng)Ax≤b的一個(gè)解,d為任意常數(shù)。則x+d=(x1+d,x2+d,…,xn+d)也是該系統(tǒng)Ax≤b的一個(gè)解。
?
?
?
poj3159:發(fā)蘋果問題。flymouse是班長(zhǎng),他需要給每個(gè)同學(xué)發(fā)一定數(shù)量的蘋果,但是學(xué)生之間會(huì)有比較,有的學(xué)生(編號(hào)為a)認(rèn)為某個(gè)學(xué)生b的蘋果數(shù)不能超過他v個(gè)(Sb-Sa<=v)。flymouse的編號(hào)為1,現(xiàn)在要求滿足學(xué)生要求,并且使S1 - Sn最大。
解:從a到b連接一條有向邊,權(quán)值為v。以1為起始點(diǎn),求到每個(gè)點(diǎn)的最短路徑,最終dis[n]即為所求。
?
poj1364:有一個(gè)國(guó)王,它只會(huì)算連續(xù)的數(shù)的加法,假設(shè)一串?dāng)?shù){a1,a2,...an},給出條件si,ni,operator,ki,意思是從si到si+ni這段數(shù)的和>或者<ki。現(xiàn)在又n組這樣的條件,判斷這些條件是否存在矛盾。
解:設(shè)S[i]表示從串開頭1到i的和,S[0]=0,則條件可轉(zhuǎn)化為:S[ni+si] - S[si-1] > ki(or <)。由于S[i]均為整數(shù),可以轉(zhuǎn)化為:S[ni+si] - S[si-1] >= ki?+ 1(or <= ki-1)。先將條件全部轉(zhuǎn)化為<=形式,再添加超級(jí)源點(diǎn)n+1,到其余各點(diǎn)連接一條邊,權(quán)值為0。利用spfa判斷負(fù)環(huán)的存在。
?
poj2983:有兩個(gè)敵對(duì)勢(shì)力,a方想弄清楚b方的n個(gè)防御站的位置,通過一些地下組織。地下組織提供多條情報(bào),你要判斷這些情報(bào)是否可靠。情報(bào)分為兩種:P A B X:A站在B站北邊X公里;V A B:A站在B站北邊至少1公里,但具體多遠(yuǎn)不清楚。現(xiàn)在給出n個(gè)站和m條情報(bào),判斷這m條情報(bào)是否可靠。
解:設(shè)S[i]表示i站距離最南邊的距離,S[0]=0,則情報(bào)可以轉(zhuǎn)化為S[A]-S[B]<=X&&S[A]-S[B]>=X;S[A] - S[B]>=1。首先將這些不等式全部轉(zhuǎn)化為<=,求最短路用bellmanford判斷負(fù)環(huán)。
?
poj1201:給出n(n=50000)段連續(xù)的整數(shù)(整數(shù)均小于50000),要求出一個(gè)最小的集合Z,至少包含第i段里面ci個(gè)數(shù)。
解:S[i]表示Z集合從0到i-1中取的整數(shù)的個(gè)數(shù)。對(duì)于段[a,b]取不小于c個(gè)數(shù),則有:S[b+1]-S[a]>=c。顯然,這是求最長(zhǎng)路。(用spfa注意添加源點(diǎn))
有關(guān)差分約束系統(tǒng)建模問題,可參
總結(jié)
以上是生活随笔為你收集整理的差分约束系统——建模与求解的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 网络流之——最小费用最大流
- 下一篇: poj2516 最小费用最大流