題目描述
從$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這個集合的數最少需要多少個數,列舉每個狀態的子...