UOJ370 滑稽樹上滑稽果 狀壓DP

2022-06-21 12:36:10 字數 866 閱讀 3821

題目分析:

答案肯定是鏈,否則可以把枝幹放到主幹。

去除一直存在的位,這樣0位佔滿時就會結束。

用$f[s]$表示0位填埋情況,每次轉移是它的乙個子集,我們考慮可否轉移。

再用$g[s]$儲存轉移是否合法,用滑稽果填充$g$陣列。不一定要完全滿足條件,因為有其它方案更優,無影響。

**:

1 #include2

using

namespace

std;34

#define ri register56

const

int maxn = 202000;7

8int n,a[maxn],bit=1

,maxx;

9long

long ans = 0;10

int cnt = (1

<<18)-1,res=0;11

12int f[1

<<18

];13

int g[1

<<18],vol[1

<<18

];14

char buffer[20000000], *buf=buffer;

15 inline void

in(int &x)

1920 inline void

read()

2627 inline void

init()33}

34}3536 inline void

work();43}

44}45 ans += f[bit-1

];46 printf("

%lld

",ans);47}

4849

intmain()

UOJ 370 UR 17 滑稽樹上滑稽果

n leq 1e5 個點,每個點有個權值 a i leq 2e5 現將點連成樹,每個點 i 的鏈結代價為 a i and i父親的代價 這裡的 and 是二進位制按位與,求最小總代價。日常被坑。首先肯定是要把這些點連成一條鏈,盡量使得代價andand就and成0了。然後呢。方法一 貪心,從小到大排。...

370 區間加法

題目描述 假設你有乙個長度為 n 的陣列,初始情況下所有的數字均為 0,你將會被給出 k 個更新的操作。其中,每個操作會被表示為乙個三元組 startindex,endindex,inc 你需要將子陣列 a startindex endindex 包括 startindex 和 endindex 增...

UOJ 308 UNR 2 UOJ拯救計畫

uoj 如果模數很奇怪,我們可以插值一下,設 f i 表示用了 i 種顏色的方案數。然而模 6 這個東西很有意思,6 2 3 所以我們只需要考慮其模 2 和模 3 的結果了。而最終答案的貢獻是 sum k a i f i 當 i ge 3 的時候 6 a k i 所以我們只需要知道 f 0 f 1 ...