Loj2003 SDOI2017 新生舞會

2021-10-23 04:28:52 字數 2026 閱讀 5876

這道題太明顯了,一眼看過去就知道是0/1分數規劃。

先用二分列舉mid,假設mid就是c

我們要判斷的是

a 1+

a2+.

..+a

nb1+

b2+.

..+b

n>=c

\frac>=c

b1​+b2

+...

+bn​

a1​+

a2​+

...+

an​​

>=c

然後我們就可以把分母乘到c上面去,得到

a 1+

a2+.

..+a

n>=c

(b1+

b2+.

..+b

n)

a_1+a_2+...+a_n>=c(b_1+b2+...+b_n)

a1​+a2

​+..

.+an

​>=c

(b1​

+b2+

...+

bn​)

這樣以後化簡完不就沒得做了嗎?

如果做過很多道0/1分數規劃的題一定會知道用圖論來求,那麼我們就可以把每一項a和b放在一起,得到

( a1

−c∗b

1)+(

a2−c

∗b2)

+...

+(an

−c∗b

n)

>=0

(a_1-c*b_1)+(a_2-c*b_2)+...+(a_n-c*bn)>=0

(a1​−c

∗b1​

)+(a

2​−c

∗b2​

)+..

.+(a

n​−c

∗bn)

>=0

然後我們把男生和女生之間都連一條邊,這條邊流量為1,費用為a[j

][j]

−c∗b

[i][

j]

a[j][j]-c*b[i][j]

a[j][j

]−c∗

b[i]

[j],用最大費用最大流跑一遍,看看最大的費用是否大於0即可

參考**

#include

#include

#include

#include

#include

#define inf 0x3f3f3f3f

#define eps 1e-8

using

namespace std;

const

int n =

2e2+

6, m =

2e5+6;

int tot, head[n<<1]

, ver[m<<1]

, w[m<<1]

, cur[n<<1]

, next[m<<1]

;double leng[m<<1]

;int mark[n<<1]

, vis[n<<1]

, s, t, n;

double dis[n<<1]

, ans, a[n]

[n], b[n]

[n];

void

add(

int x,

int y,

int w,

double d)

bool

spfa()

}}return dis[t]

!=-inf;

}int

dfs(

int x,

int now)}}

return val;

}void

zkw()}

}bool

check

(double x)

intmain()

printf

("%.6lf\n"

, ans)

;return0;

}

題解 LOJ2004 SDOI2017 硬幣遊戲

考慮建出ac自動機。則問題相當於,我們每步會從節點 i 等概率地走向 text i,0 或 text i,1 給定了乙個起點和若干個終點,求從每個終點結束的概率。因為到達乙個終點後遊戲就結束了,我們不會繼續走,所以每個終點被經過的次數要麼是 0 要麼是 1 因此,從每個終點結束的概率,在數值上就等於...

LOJ2002 SDOI2017 序列計數

loj 洛谷 考慮補集轉換,用所有數減去只用合數的方案數,我們先考慮算所有數的 首先可以得到乙個普及組 rm dp f 表示當前填了前 i 個,總和 p 為 j 的方案數。記錄乙個 cnt i 表示 p 為 i 的數的個數。轉移就是 f sum f p cdot cnt k 然後我們拿矩陣大力優化這...

LOJ 2270 SDOI 2017 天才黑客

給出一張 n 個點,m 條邊的圖以及乙個大小為 k 的字典樹,每條邊有 x,y 的權值,一條路徑的權值就是上面所有邊的 x 之和 相鄰兩條邊在字典樹上的 lca 的深度之和。求 1 到每個點的最短路。對於 100 的資料,t leq 10 2 leq n leq 50000 1 leq m leq ...