bzoj4976 寶石鑲嵌 亂搞 dp

2022-05-20 09:55:32 字數 737 閱讀 8741

題目描述

從$n$個數中選出$n-k$個,使得它們的二進位制或(or)最大。輸出這個值。

輸入第一行包含兩個正整數$n,k(2\le n\le 100000,1\le k\le 100,k第二行包含$n$個整數$w_1,w_2,...,w_n(0\le w_i\le 100000)$,分別表示每個寶石的魔力。

輸出輸出一行乙個整數,即最大的威力。

樣例輸入

4 132 16 8 7

樣例輸出

56題解

亂搞+dp

由於上限為$100000$,因此最多只有$17$個二進位制位。

考慮當可以保留的數的個數$n-k\ge 17$時,顯然對於每一位選出乙個該位為$1$的數,選出來的數一定不超過$17$個。因此一定能夠佔滿所有的二進位制位。所以所有的數的二進位制或即為答案。

當$n-k<17$時,由於$k$只有$100$,所以$n$只有$117$,因此可以暴力dp。設$f[i][j]$表示能否選出$i$個數使得它們的二進位制或為$j$。然後隨便轉移即可。

時間複雜度$o(117*17*2^)$。

#include bool f[17][131080];

int main()

else

for(i = 131071 ; ~i ; i -- )

if(f[n - m][i])

return printf("%d\n" , i) , 0;

} return 0;

}

bzoj4976寶石鑲嵌 DP

description 魔法師小q擁有n個寶石,每個寶石的魔力依次為w 1,w 2,w n。他想把這些寶石鑲嵌到自己的法杖上,來提公升 法杖的威力。不幸的是,小q的法杖上寶石鑲嵌欄太少了,他必須扔掉k個寶石才能將剩下的寶石鑲嵌上去。法杖的 威力等於鑲嵌在上面的所有寶石的魔力按位做或 or 運算的結果...

bzoj 4976 寶石鑲嵌 動態規劃

魔法師小q擁有n個寶石,每個寶石的魔力依次為w 1,w 2,w n。他想把這些寶石鑲嵌到自己的法杖上,來提公升法杖的威力。不幸的是,小q的法杖上寶石鑲嵌欄太少了,他必須扔掉k個寶石才能將剩下的寶石鑲嵌上去。法杖的威力等於鑲嵌在上面的所有寶石的魔力按位做或 or 運算的結果,請寫乙個程式幫助小q做出最...

bzoj 4976 寶石鑲嵌(貪心 高位字首和)

傳送門biu 當n k 16時,每一位上的1都可以出現,只需要考慮每位是否有1即可。剩下的情況n最大只有115 資料範圍瞬間變得友善了 令f state 代表組合出state最少需要多少個數,跑揹包即可。然後再將f state 更新成組合出包含state這個集合的數最少需要多少個數,列舉每個狀態的子...