传送门

解题思路

  设\(f(i)\)表示和为\(i\)时的方案数,那么转移方程为\(f(i)+=f(i-x)\),\(x\)为当前枚举到的数字,这样做是\(O(n\sum a_i)\)的,考虑优化。发现最后要的并不是方案数,最后的奇偶性,那么转移方程转化为\(f(i)^=f(i-x)\),这样可以用\(bitset\)优化,时间复杂度\(O(\frac{n \sum a_i}{32})\)。

代码

#include<iostream>
#include<cstdio>
#include<bitset> using namespace std;
const int N=2000005; int n,sum,ans;
bitset<N> f; int main(){
scanf("%d",&n); int x;
f[0]=1;
for(int i=1;i<=n;i++) {
scanf("%d",&x); sum+=x;
f=(f^(f<<x));
}
for(int i=1;i<=sum;i++)
if(f[i]) ans^=i;
printf("%d\n",ans);
return 0;
}

BZOJ 3687: 简单题(dp+bitset)的更多相关文章

  1. BZOJ 3687: 简单题 bitset

    3687: 简单题 Time Limit: 10 Sec  Memory Limit: 512 MB[Submit][Status][Discuss] Description 小呆开始研究集合论了,他 ...

  2. 3687: 简单题(bitset)

    3687: 简单题 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 700  Solved: 319[Submit][Status][Discuss] ...

  3. bzoj3687简单题(dp+bitset优化)

    3687: 简单题 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 861  Solved: 399[Submit][Status][Discuss] ...

  4. bzoj 3687 简单题——bitset

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3687 关于 bitset :https://blog.csdn.net/snowy_smil ...

  5. [bzoj 3687]简单题 bitset的运用

    题意 给定一个正整数集,求所有子集算术和的异或和   题解 每次加入一个元素x,用原集合a xor (a<< x) 然后每一个值统计一下 bitset看起来很优越,是一个能位运算的布尔数组 ...

  6. BZOJ 3687 简单题

    bitset维护某个和是否存在. bit<<x:所有子集的和+x. #include<iostream> #include<cstdio> #include< ...

  7. BZOJ3687: 简单题(dp+bitset)

    Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 1138  Solved: 556[Submit][Status][Discuss] Descripti ...

  8. [Bzoj3687]简单题(bitset)

    3687: 简单题 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 1150  Solved: 565[Submit][Status][Discuss] ...

  9. BZOJ3687 简单题 【bitset】

    BZOJ3687 简单题 Description 小呆开始研究集合论了,他提出了关于一个数集四个问题: 1.子集的异或和的算术和. 2.子集的异或和的异或和. 3.子集的算术和的算术和. 4.子集的算 ...

随机推荐

  1. 16/7/14-MySQL-关键字

    Mysql 关键字-保留字 转载:http://linux.it.net.cn/e/data/mysql/2014/1202/9460.html 时间:2014-12-02 13:09来源:linux ...

  2. 聊聊redis的监控工具

    序 本文主要研究一下redis的监控工具 redis-stat redis-stat是一个比较有名的redis指标可视化的监控工具,采用ruby开发,基于redis的info命令来统计,不影响redi ...

  3. Android深度探索-卷1第八章心得体会

    本章介绍了如何将Linux驱动分成多个实现文件和Linux常用的代码重用方式还有些强行卸载Linux驱动的方法 开发一个Linux驱动,可能会在init.exit等函数中发生错误导致Linux驱动安装 ...

  4. Java thread(1)

    这一部分主要讨论 java多线程的基本相关概念以及两种java线程的实现方式: 线程与进程: 这个操作系统书上介绍得很详细,这里就列出一些比较主要的: 线程: 线程本身有很少的资源,因为所拥有的资源较 ...

  5. EasyUI日期控件获值和赋值

    一,获值 1.$("#id").datebox('getValue') 2.$("input[name='mydate']").val() 参考:http:// ...

  6. SQL根据日期计算当月有多少天(转)

    原文链接:https://blog.csdn.net/dobear_0922/article/details/2393235 --1.删除测试用表IF OBJECT_ID(N'Test', N'U') ...

  7. Jenkins搭建,节点配置

     一.服务器安装jdk和Jenkins 二.安装完成后打开jenkins页面:http://localhost:8080,设置管理员密码后登陆进去. 三.系统管理->全局变量,勾选允许用户注册 ...

  8. 监控服务器的脚本log_agent

    监控服务器脚本: 将恶意攻击IP地址加入黑名单 1.分割日志 使用os.system 执行操作系统命令,使用重定向来分割日志 2.获取访问ip 读日志文件,获取访问ip记录,使用字符串.split来获 ...

  9. Java连接SQL Server:jTDS驱动兼容性问题

    Java连接SQL Server 2000数据库时,有两种方法: (1)通过Microsoft的JDBC驱动连接.此JDBC驱动共有三个文件,分别是mssqlserver.jar.msutil.jar ...

  10. [BZOJ4151]The Cave

    Solution: ​ 假设现在在点1,有许多形如 (x, y, z) 的限制条件,那么对于一组限制,必须先走到 x, y 的 \(\frac{z-dis(x, y)}{2}\) 级祖先,叫这些点为限 ...