Wannafly挑戰賽6 鎖

2022-07-19 14:15:18 字數 927 閱讀 9164

106號房間共有n名居民, 他們每人有乙個重要度。房間的門上可以裝若干把鎖。假設共有k把鎖,命名為1到k。每把鎖有一種對應的鑰匙,也用1到k表示。鑰匙可以複製並發給任意多個居民。每個106房間的居民持有若干鑰匙,也就是1到k的乙個子集。如果幾名居民的鑰匙的並集是1到k,即他們擁有全部鎖的對應鑰匙,他們都在場時就能開啟房門。新的陸戰協定規定,一組居民都在場時能開啟房門當且僅當他們的重要度加起來至少為m。問至少需要給106號房間裝多少把鎖。即,求最小的k,使得可以適當地給居民們每人若干鑰匙(即乙個1到k的子集),使得任意重要度之和小於m的居民集合持有的鑰匙的並集不是1到k,而任意重要度之和大於等於m的居民集合持有的鑰匙的並集是1到k。

第一行兩個整數n和m,0示例1

複製4 3

1 1 1 1

複製

6

106號房共有4名居民,只有3人在場時才能開啟門。這時共需6把鎖。

解題思路:一開始沒有想出來。。。我們可以這麼想:當某個集合的重要度的總和沒有到達m,但是再加上任意乙個人,他們的重要度就能滿足要求。我們假設這個集合缺少一把鑰匙,我們求出所有的這樣的集合,使得這些集合都缺少一把不同的鑰匙,此時所有滿足這樣條件的集合數量即為所需要的鎖的數量了。

#includeusing

namespace

std;

long

long a[25

];long

long dp[1

<<21

];int

main()

long

long ans=0

;

for(int i=0;i<(1

<)

}if(dp[i];

}printf(

"%lld\n

",ans);

//for(int i=1;i<1}

Wannafly挑戰賽6 D 鎖

時間限制 c c 1秒,其他語言2秒 空間限制 c c 131072k,其他語言262144k 64bit io format lld 題目描述 106號房間共有n名居民,他們每人有乙個重要度。房間的門上可以裝若干把鎖。假設共有k把鎖,命名為1到k。每把鎖有一種對應的鑰匙,也用1到k表示。鑰匙可以複...

Wannafly挑戰賽A 概率DP

給你乙個長 n 的序列,m 次查詢 每次查詢給乙個 x,然後 從序列的最左端 1 開始,每次隨機的選擇乙個右端點 r,如果兩個端點間的區間和不超過 x 就進行一次分割,然後把左端點變成 r 1,否則一直隨機下去。問這樣分割出來的期望段數 第一行兩個數 n,m 之後一行 n 個數表示這個序列 之後m行...

Wannafly挑戰賽5 補題

a 珂朵莉與宇宙 思路 科學暴力 列舉字首和,同時計算字首和裡面可能出現的完全平方數,匹配字首和 與完全平方數的差值是否在之前的字首和出現,出現了幾次就是存在多少個區間,利用的是連續的性質。include using namespace std typedef long long ll const ...