多彩的樹 狀壓dp 數學

2021-10-21 02:29:54 字數 697 閱讀 6650

n個點,n-1條邊的樹,每個節點都有顏色

1<=k<=10, 1<=n<=5e4

顏色數量少,可以上狀壓,表示選中的顏色,比如5(101)表示當前選的顏色1,3。然後按照這些顏色跑樹上的連通塊,當前連通塊大小是cnt,那麼可以形成的路徑數是cnt(單點)+

但是呢比如5(101)包含了4(100),1(001)這些情況,要進行容斥,最後累加即可。

#includeusing namespace std;

#define io cin.tie(0);ios::sync_with_stdio(false);

#define debug(x) cout<

int color[maxn], vis[maxn];

void dfs(int x, int u)

}int popcnt(int s)

return ans;

}void solve()

ll ans = 0;

for(int t = 1; t < (1 << k); t ++)}}

for(int t = 1; t < (1 << k); t ++)

ans = (ans + dp[t] * f[popcnt(t)] % mod) % mod;

}cout << ans << endl;

}int main()

基本的狀壓DP

給出乙個 times 要求棋子不相鄰,求方案數 n 100 m 8 f i s sum 為零表示不相鄰 s 表示當前行中棋子的情況 解析 我們會發現乙個問題,上述式子確實可以保證上下行不相鄰,但是左右呢,對於我這個剛認識狀壓的菜雞來說,很懵逼,答 狀態壓縮的本質 存在乙個維度是在進製級別表達多組狀態...

狀壓DP的總結

狀壓dp的標誌 資料小 通過題目所給出的條件以後得到的特徵集合小 一 cf259div2 d 題目大意 保證b i 中每個數互質,給出a i 然後求1 n的abs a i b i 最小。a i 30 思路 首先得到b i 必然小於60。這個很重要,因為我們列舉的b的集合就是60.首先當b如果都取1,...

對狀壓dp的見解

看了好幾篇部落格,終於對一些簡單的狀壓dp有了點了解。就像hdu1074。有個部落格 感覺淺顯易懂,但是就是看不出來,然後就是打表 打表 最左邊的一列1 7是 s 1 1 3 的每一種狀態,s是每一塊的第一行,然後 i 0 n 1 temp 1 i 列舉 每一位的1 也就是每一塊的第二行 第三行是 ...