WC2018 州區劃分 FMT優化DP

2021-09-11 05:01:41 字數 2656 閱讀 9839

這是鏈結

考慮動態規劃,設fsf_

fs​表示$s 集合中

的點的劃

分的滿意

度之和,

設集合中的點的劃分的滿意度之和,設

集合中的點的

劃分的滿

意度之和

,設t_表 示表示

表示s集 合中

的點是否

合法

,集合中的點是否合法,

集合中的點是

否合法,

w_s表示表示

表示s$集合中的點的權值之和,那麼可以得到方程:

f s=

∑t⊆s

fs−t

×tt×

(wtw

s)

pf_=\sum_f_\times t_\times (\frac)^

fs​=t⊆

s∑​f

s−t​

×tt​

×(ws

​wt​

​)p考慮用子集卷積去優化這個式子,但是發現f

ff需要自己卷自己,不過沒有關係,因為子集卷積時是按照集合大小分層處理,s−t

s-ts−

t的集合大小必定小於s

ss集合的大小。

然後考慮將式子變形化成卷積的形式:

w sp

×fs=

∑t⊆s

fs−t

×tt×

wt

pw_^p\times f_=\sum_f_\times t_\times w_^

wsp​×f

s​=t

⊆s∑​

fs−t

​×tt

​×wt

p​直接分層用子集卷積優化即可,記得最後要除以乙個wsp

w_^ws

p​。

/************************************====

* author : ylsoi

* time : 2019.2.21

* problem : luogu4221

* e-mail : [email protected]

* ***********************************=*/

#include

#define rep(i,a,b) for(int i=a,i##_end_=b;i<=i##_end_;++i)

#define drep(i,a,b) for(int i=a,i##_end_=b;i>=i##_end_;--i)

#define debug(x) cout<<#x<<"="<#define fi first

#define se second

#define mk make_pair

#define pb push_back

typedef

long

long ll;

using

namespace std;

void

file()

template

<

typename t>

void

read

(t &_)

const

int maxn=21+

3;const

int maxw=(1

<<21)

+10;const

int mod=

998244353

;int n,m,p,w[maxn]

,g[maxn]

;int lim,sum[maxw]

,f[maxn]

[maxw]

,g[maxn]

[maxw]

;void

inc(

int&_,

int __)

intqpow

(int x,

int y)

return ret;

}struct union_set

void

reset()

}u;void

fmt(

int*a,

int ty)

void

subset()

}int

main()

rep(i,

1,n)

read

(w[i]);

lim=

1

0,lim-1)

int cnt=0;

rep(i,

1,n)if(

(1<<

(i-1

)&s)

&& u.

find

(i)==i)

++cnt;

g[__builtin_popcount

(s)]

[s]=

(flag || cnt>1)

*qpow

(sum[s]

,p);

u.reset()

;//printf("%d %d\n",s,g[s]);

}subset()

;printf

("%d\n"

,f[n]

[lim-1]

);return0;

}

WC2018 州區劃分

點此看題 設d p s dp s dp s 為選出來的點狀壓為s ss,所得到的滿意度總和,轉移 d p s 1 f s i s dp i g s i dp s frac sum dp i times g s i dp s f s 1 i s d p i g s i 其中f s f s f s 是w...

WC 2018 州區劃分

給乙個無向圖 g v,e 滿足 v 21 對於某一種將 g v,e 劃分為k個的有序集合方案,若每乙個子集 g i v i,e i e i 都不存在尤拉迴路,則會對答案貢獻為 其中,x 為集合元素,w x 為元素 x 的權值。題解 被題意坑成cu 我還是太菜了 其實很顯然我們會得到乙個 dp 設 f...

WC2018 州區劃分

題目 就當那個判斷乙個州不合法的條件是存在尤拉迴路吧 一張無向圖存在尤拉迴路的條件是 圖連通不存在度數為奇數的點 於是我們列舉每乙個子集,可以在 o 2 nn 2 的時間內判斷乙個集合是否能獨立成為乙個州 之後我們設 dp i 表示選取狀態為 i 的時候的答案,s i 為這個狀態對應的城市的人口之和...