国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

[BZOJ2687]簡單題(dp+bitset優(yōu)化)

2019-11-11 01:01:16
字體:
供稿:網(wǎng)友

題目描述

傳送門

題解

剛開始想的有問題,因?yàn)楹芏嘧蛹涂赡転橥粋€數(shù) f(i)表示和為i的子集一共有多少個,那么每加進(jìn)一個數(shù)x,f(i+x)+=f(i) 這樣的話時間是O((∑ai)2)的,考慮怎么優(yōu)化 很顯然最終的答案只與f的奇偶有關(guān),那么讓f(i)表示和為i的子集的個數(shù)%2的值 轉(zhuǎn)移就變成了f(i+x)^=f(i) 可以把整個f看成一個二進(jìn)制數(shù),這樣就是左移一下然后做異或 直接搞成二進(jìn)制數(shù)太大了,用bitset搞一下就行了

代碼

#include<algorithm>#include<iostream>#include<cstring>#include<cstdio>#include<cmath>#include<bitset>using namespace std;#define N 2000005int n,x,sum,ans;bitset <N> f;int main(){ scanf("%d",&n); f[0]=1; for (int i=1;i<=n;++i) { scanf("%d",&x); sum+=x; f^=f<<x; } for (int i=1;i<=sum;++i) if (f[i]) ans^=i;
發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 灵石县| 黄冈市| 阿尔山市| 海口市| 武定县| 紫阳县| 丹凤县| 辽宁省| 呈贡县| 文安县| 仙游县| 鄢陵县| 鲁甸县| 庐江县| 富民县| 佛冈县| 芮城县| 晋中市| 马龙县| 台州市| 化隆| 精河县| 犍为县| 贵溪市| 商南县| 时尚| 仙居县| 思南县| 通渭县| 乌兰县| 金平| 宜宾县| 新安县| 沂南县| 天门市| 墨竹工卡县| 搜索| 丽江市| 洱源县| 久治县| 邯郸县|