BZOJ 5068 友好的生物 放縮

2021-09-12 13:02:06 字數 1289 閱讀 9788

猜到複雜度……卻依然不會做……

這個方法感覺和不等式證明中的放縮法有點類似,所以我個人這樣稱呼……

先把c

ic_i

ci​乘進去,把式子寫出來:∑i=

1k−1

∣ai−

bi∣−

∣ak−

bk

∣\sum_^|a_i-b_i|-|a_k-b_k|

i=1∑k−

1​∣a

i​−b

i​∣−

∣ak​

−bk​

∣絕對值很煩,考慮怎麼去掉它,我們可以直接2k−

12^

2k−1

列舉前k−1

k-1k−

1個絕對值符號中的正負,然後按最後乙個值排序,直接求解,也就是把式子變成這樣:∑i=

1k−1

±(ai

−bi)

−(ak

−bk)

\sum_^\pm(a_i-b_i)-(a_k-b_k)

i=1∑k−

1​±(

ai​−

bi​)

−(ak

​−bk

​)因為最優解一定是使得前面的k−1

k-1k−

1項全部取到正,所以這樣也能求出最大值。

#include

using

namespace std;

#define ll long long

#define pa pair

const

int maxn=

100010

;const

int inf=

2147483647

;int

read()

while

(ch>=

'0'&&ch<=

'9')x=

(x<<3)

+(x<<1)

+(ch^48)

,ch=

getchar()

;return x*f;

}int n,k,c[6]

,b[6];

struct pp[maxn]

;bool

cmp(p a,p b)

intmain()

*/for

(int s=

0;s<(1

<<

(k-1))

;s++)}

printf

("%lld"

,ans)

;}

友好的生物

問題描述 w 星球是乙個和地球一樣氣候適宜 物種聚集的星球。經過多年的研究,外星生物學 家們已經發現了數萬種生物,而且這個數字還在不斷增大。w 星球上的生物很有趣,有些生物之間很友好,朝夕相伴,形影不離 但有些卻很敵 對,一見面就難免發生戰鬥。為了能夠更好地了解它們之間的友好程度,外星生物學家希望 ...

友好的生物(狀壓dp)

傳送門 戳還有集訓隊寫的的題解 大概思路 1.把c j 乘入屬性中。乘完後求的即是 2.對於前k 1個屬性和第k個屬性分別討論,即 3.列舉符號串行,最優的情況一定包含在之內 4.把生物按照第k個屬性的大小排序,保證了後面的數第k種屬性大於前面的,這樣減出來第k個屬性的差值一定是負值,滿足條件。in...

WC2005 友好的生物

這題算是毒瘤吧,看到這個題我除了o n 2 想不到別的方法 後來嘗試使用平方的方式亂搞,但是給出了反例 在看了國家集訓隊ysy的解題報告後方才明白 思路是一種放寬的思路 我們列舉每個差值的符號,在其中列舉最大值,就可以有效去除絕對值 最後按照第k位從小到大排序,來列舉 從小到大進行掃瞄,每次用當前的...