本來是想學傳遞閉包才學習bitset的,但用處實在太多瞭
bitset的表達
bitset<N>a 代表長度為N的bool數組,他通過壓位來減小時間和空間復雜度,比一般的bool數組優秀不少,初始值均為0
作用:可進行bool數組的類似操作,同時復雜度會更加優秀
可進行相關函數和操作:
1.可以利用a[i]來訪問第i位的內容,內容隻有0/1兩種
bitset<N>a,b
2.a&b a|b a^b ~a << >>(多出來的位補0) 復雜度均為O( frac{n^{2}}{w} )w一般為64
3.相關函數
a.set(x)第x位賦值為1
a.set()全部賦值為1
a.reset()全部賦值為0
a.reset(x)第x位賦值為0
a.filp(x)翻轉第x位
a.filp()將所有翻轉
//以上復雜度為O(1)
a.any()隻要有1就是true
a.none()//是否全部為0
a.count()//統計1的個數
//以上復雜度為O(n/w)
相關題目訓練:
可當一些比較常見類型的題目來記錄:
BZOJ 3687,簡單題
BZOJ 3687
對於所有子集問題我們可以考慮dp方向
dp[i][j]代表前i個數組合表達出j的方案數,註意到異或隻和出現的奇偶性有關,所以我們dp可以表達位dp[i][j]前i個數組合表達出j的方案數奇偶性
考慮轉移:
dp[0][0]=1;
for(int i=1;i<=n;i++)
{
for(int j=0;j<=maxn-10;j++){
dp[i][j]^=dp[i-1][j];
if(j>=a[i])
dp[i][j]^=dp[i-1][j-a[i]];
}
}
-
扫码下载安卓APP
-
微信扫一扫关注我们微信扫一扫打开小程序手Q扫一扫打开小程序
-
返回顶部
Copyright © TaoHigo.com |
2020-2021 |
|
queries in 0.473 s