暴力就是做揹包,然後找最接近一半的可以湊出來的值
由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...