DP bitset 17 6 4 均分 題解

2021-08-02 04:35:34 字數 964 閱讀 7145

暴力就是做揹包,然後找最接近一半的可以湊出來的值

由n<=10^6且sigma a[i]<=10^6我們可以知道不相等的a[i]最多有根號10^6種

那麼就從乙個10^6個物品的揹包變成了10^3個物品的每個物品可以有多個的揹包

用二進位制拆包優化,複雜度為10^3*10^6*log

用bitset優化,再除以32

事實上可以參考2023年任之洲集訓隊**,提出了一種n log n的近似演算法,效果也很優秀,審題人並未實現,不過應該可以ac,因為曾經用這個演算法ac過其他的帶權均分問題

#include

#include

#include

#include

#include

#include

#include

#include

#define inf_min 1e9

using

namespace

std;

int t,n,tot,ans;

int a[1000001],cnt[1001];

bitset

<1000005> bit;

int main()

for(int i=1;i<=n;i++)

else }}

ans = inf_min;

for(int i=0;i<=bit.size();i++) if(bit[i]) ans = min(ans, abs(i-(tot-i)));

printf("%d\n",ans);

}return

0;}

bzoj3687簡單題 dp bitset優化

time limit 10 sec memory limit 512 mb submit 861 solved 399 submit status discuss 小呆開始研究集合論了,他提出了關於乙個數集四個問題 1 子集的異或和的算術和。2 子集的異或和的異或和。3 子集的算術和的算術和。4 子...

C 17 6 lambda擴充套件

自從c 17開始,如果lambda表示式符合要求的話,該表示式會隱式轉換為constexpr表示式。表示式內沒有靜態變數,沒有虛函式,沒有 try catch語句,沒有new delete關鍵字 如下 auto squared auto val 隱式轉換為constexpr表示式,即可以在編譯器求值...

NYOJ 176 整數劃分(二)

整數劃分 二 時間限制 1000 ms 記憶體限制 65535 kb 難度 3 描述把乙個正整數m分成n個正整數的和,有多少種分法?例 把5分成3個正正數的和,有兩種分法 1 1 3 1 2 2 輸入第一行是乙個整數t表示共有t組測試資料 t 50 每組測試資料都是兩個正整數m,n,其中 1 n m...