Jzoj4841 平衡的子集

两轮平衡车源程序,方能仪器,自平衡小车 改程序为方能仪器两轮平衡车程序源代码,程序调试通过,采用的是atmega16a+mpu6050硬件结构 立即下载

夏令营有N个人,每个人的力气为M(i)。请大家从这N个人中选出若干人,如果这些人可以分成两组且两组力气之和完全相等,则称为一个合法的选法,问有多少种合法的选法?

这道题我们拷打数据范围后知道应该是折半搜索了

但是似乎不是那么好做

我们考虑如何搜索,显然每个人有三种状态,在队伍1中,在队伍2中和没有被选入

我们将所有可能的状态都搜索出来加入一个数据结构(按照队伍1-队伍2的力量之差p作为关键字)

但是这样做是有问题的,很多情况下会重复计算

例如,四个人M为1 1 1 1,折半搜索以后,我们会得到以下几个状态{-2,-1,0,1,2},其中有两种可能的情况

1.两种状态所选人物完全相同但因为分配方法不同导致p不相同

2.两种状态所选人物不同但是因为分配方法导致p相同

所以我们不能简单记录选了哪些人或者是这些人的p是多少而是两者都要计算

所以我们可以考虑用map套set(一个p和一个k对应了一种选人的方法)

map的第一维表示的是p,每个节点都是一个set存储一个二进制的选人方案k(1表示选择,0表示不选)

这样的话在第二次搜索时,我们将值为-p的那个set拿出来,遍历其中每一个节点,在全局开一个数组vs表示某种选人的方式是否合法

最后统计答案即可

注:本题正解应为hash表

#pragma GCC optimize("O3")
#pragma G++ optimize("O3")
#include<set> 
#include<map>
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
map<int,set<int> > s; 
set<int> vis[1024],q; 
int n,v[30],m,ans=0;
bool vs[1<<20]; 
void dfs(int x,int p,int k){
	if(x>m) s[p].insert(k); 
	else {
		dfs(x+1,p,k);//x不选
		dfs(x+1,p+v[x],k+(1<<x-1));//x加入队伍1
		dfs(x+1,p-v[x],k+(1<<x-1));//x加入队伍2
	}
}
void dgs(int x,int p,int k){
	if(x>n){
		if(!vis[k].count(p)&&s.count(-p)){ //判重,对于k和p相等的情况可以不用重复计算
			q=s[-p];
			for(set<int>::iterator it=q.begin();it!=q.end();++it) vs[*it+(k<<10)]=1;  //遍历set统计答案
			vis[k].insert(p);
			return;
		}
		return;
	} else {
		dgs(x+1,p,k);
		dgs(x+1,p+v[x],k+(1<<x-m-1));
		dgs(x+1,p-v[x],k+(1<<x-m-1));
	}
}
int main(){
	freopen("subset.in","r",stdin);
	freopen("subset.out","w",stdout);
	scanf("%d",&n);
	for(int i=1;i<=n;++i) scanf("%d",v+i);
	m=n>>1;
	dfs(1,0,0); 
	dgs(m+1,0,0);
	for(int i=1;i<(1<<20);++i) ans+=vs[i];
	printf("%d\n",ans);
}

基于STM32与ESP8266的MQTT协议实现阿里云物联网平台远程LED控制 本文详细介绍了如何利用STM32单片机与ESP8266 Wi-Fi模块,通过MQTT协议连接阿里云物联网平台,实现远程控制LED灯的完整物联网项目。内容涵盖硬件连接、阿里云平台配置、MQTT协议与AT指令解析、STM32代码实战以及数据解析与调试技巧,为嵌入式开发者提供了一个清晰、实用的物联网入门实践指南。 阅读详情

相关推荐

centos 添加新硬盘,对根目录扩容

本地安装了虚拟机,系统为centos7,使用过程中,渐渐地发现磁盘容量不够用了,于是在虚拟机中新增了一块硬盘。 进入系统内查看: sdb是新增的硬盘,大小为40g。 接下来有两种方式,一种是普通方式直接挂载。https://blog.youkuaiyun.com/qq_39314099/article/details/106200322 这样的话只有在挂载点的目录下操作才能使用到这个新硬盘,不是很理想。 还有一种方式lvm,逻辑卷管理的方式。 LVM简单介绍: 它是 Linux 下对磁盘分区进行管

qq_39314099的博客 1万+

【JZOJ 4841】平衡的子集

Description 夏令营有N个人,每个人的力气为M(i)。请大家从这N个人中选出若干人,如果这些人可以分成两组且两组力气之和完全相等,则称为一个合法的选法,问有多少种合法的选法? Data Constraint 40%的数据满足:1<=M(i)<=1000; 对于100%的数据满足:2<=N<=20,1<=M(i)<=100000000 Solution 这道题用到了一个折半搜索,把数分成两组,这样

714

Python数据爬取超详细讲解(零基础入门,老年人都看的懂)

Python数据爬取超详细讲解(零基础入门,老年人都看的懂)

python03011的博客 3751

jzoj4841 平衡的子集

问题描述有n个数,问有多少种从其中选若干个数的合法方案。 一个合法方案是指,选出来的数可以分为两组,使得两组之和相等。 对于100%的数据满足:2<=N<=20,1<=a[i]<=100000000解一开始还理解错题意了(2次),一开始以为是所有数都要分组,然后以为问的是有多少种分组方案使得和相等。看到20想到的就是状压和折半搜索(Alan给我们口胡的那个东西)。 先把20个数分成两半。 我

一位蒟蒻的小博客 647

MATLAB数据可视化:pcolor函数从入门到精通(附colormap调色秘籍)

本文深入解析MATLAB中pcolor函数的数据可视化应用,从核心机制、坐标网格指定到常见陷阱规避。重点揭秘colormap调色秘籍,涵盖内置色系选用原则、个性化定制方法及高级渲染技巧,助你创作出信息准确、视觉出色的专业图表,精通从数据到出版级图表的全流程。

kafka6courier的博客 245

Pytorch入门教程

Pytorch学习总结:1.张量Tensor 张量是一种特殊的数据结构,与数组和矩阵非常相似。在PyTorch中,我们使用张量对模型的输入和输出以及模型的参数进行编码。 张量类似于NumPy的ndarray,除了张量可以在 GPU 或其他硬件加速器上运行。事实上,张量和NumPy数组通常可以共享相同的底层内存,从而无需复制数据。...

专注大数据与人工智能技术分享,欢迎私信加群互相学习! 4万+

【JZOJ4841】平衡的子集

Description有N个人,每个人的力气为M(i)。从这N个人中选出若干人,如果这些人可以分成两组且两组力气之和完全相等,则称为一个合法的选法,问有多少种合法的选法?

sadnohappy 741

AI原生应用API编排:如何实现高效的权限管理?

随着GPT-4、Claude 3等大模型的普及,AI原生应用(从设计之初就以AI为核心的应用)正从“概念”走向“落地”。依赖大量外部API的协同工作(如用户身份API→大模型生成API→支付API→存储API)。但随之而来的挑战是:如何在复杂的API调用链中,确保每个环节的权限合规?本文将聚焦这一问题,覆盖API编排的基础逻辑、权限管理的核心机制(如RBAC/ABAC)、实战工具链(如OPA策略引擎),以及常见场景的解决方案。本文将按照“场景引入→核心概念→原理拆解→实战演练→趋势展望”的逻辑展开。

大数据洞察的博客 451

JZOJ 4841【NOIP2016提高A组集训第4场】平衡的子集

Description夏令营有N个人,每个人的力气为M(i)。请大家从这N个人中选出若干人,如果这些人可以分成两组且两组力气之和完全相等,则称为一个合法的选法,问有多少种合法的选法?Data Constraint40%的数据满足:1<=M(i)<=1000;对于100%的数据满足:2<=N<=20,1<=M(i)<=100000000Solution我们可以采用折半搜索。我们设一个人有三种状态:-1

dance in th dark的博客 404

可控异常的契约化设计:在 ABAP 中用 CX_STATIC_CHECK 把可预期错误变成接口的一部分

文章摘要: 本文探讨了ABAP系统中异常处理的工程化设计原则,强调将可预期的业务异常作为接口契约的一部分。核心观点是:对于调用方能够合理处理的错误情况,应使用继承自CX_STATIC_CHECK的受检异常,通过方法签名强制调用方处理或显式转发。文章对比了ABAP三大异常根类的适用场景,提出"三问法"判断异常是否适合受检处理,并给出了包含上下文信息的异常类实现示例。通过Fiori文件上传案例,展示了如何在分层架构中合理传递和转换异常,最终在OData服务层将业务异常映射为标准错误响应。这种

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 3062

智能座舱SoC平台横评:SA8155P、SA8255P、SA8295P、MT8678、MT8628 谁是下代车机首选?

高通SA8295P以PC级架构、强悍AI算力,代表安卓阵营迈向“本地大模型+空间计算”阶段;联发科MT8678则凭借低功耗 + 高带宽,成为副驾多媒体/副屏智能化的性价比之王。在座舱设计中,SoC平台决定了你能给用户什么样的交互方式,选型时切忌只看跑分,而要回归“体验-热设计-平台生态”的三角平衡。

weixin_43199439的博客 3356

JZOJ4841 平衡的子集

题意:有一堆数字,从中任意选一些,使得这些数字能够分成两组,两组和相等。 n<=20,ai<=10^9; 这题看起来简单,实际上比较难,暴力的话拿不了多少分。 正解的脑洞超大,我觉得我好弱啊。 首先我们要知道每个数都有3个系数,-1,0,1。 因此我们考虑折半搜索(别问我怎么考虑到的),因为只有3个系数,我们可以分别对前一半和后一半分别搜索,时间复杂度是3^(n/2),搜索出所有数字的选择

老臣 470

使用MATLAB和Simulink来设计并仿真一个智能家居多传感器数据融合系统

智能家居多传感器数据融合系统旨在通过集成来自多种不同类型的传感器的数据,以提供更精确和可靠的环境信息或用户状态监测。例如,将温度、湿度、光照强度、运动检测等多种传感器的数据结合起来,可以更好地了解家庭内部的状态,并做出相应的调整或响应。在这个教程中,我们将使用MATLAB和Simulink来设计并仿真一个智能家居多传感器数据融合系统。

amy_mhd的博客 187

[JZOJ4841] 平衡的子集

Description 夏令营有N个人,每个人的力气为M(i)。请大家从这N个人中选出若干人,如果这些人可以分成两组且两组力气之和完全相等,则称为一个合法的选法,问有多少种合法的选法?(注意是选法而不是分法) 40%的数据满足:1<=M(i)<=1000; 对于100%的数据满足:2<=N<=20,1<=M(i)<=100000000 Solution设选的人中分为两个集合A,BA,

Never give in. 703

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

【jzoj4841】【平衡的子集】【搜索】

题目大意夏令营有N个人,每个人的力气为M(i)。请大家从这N个人中选出若干人,如果这些人可以分成两组且两组力气之和完全相等,则称为一个合法的选法,问有多少种合法的选法?解题思路使用meet in the middle,分开暴力枚举将两个集合的差值求出来,保存选取情况,合并的时候hash判重。code#include<set> #include<cmath> #include<cstdio> #inc

inklutcuah’s blog 396

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

【JZOJ 4841】平衡的子集 口胡题解

Description夏令营有N个人,每个人的力气为M(i)。请大家从这N个人中选出若干人,如果这些人可以分成两组且两组力气之和完全相等,则称为一个合法的选法,问有多少种合法的选法? 对于100%的数据满足:2<=N<=20,1<=M(i)<=100000000Analysis没心情码了,写口胡题解 一看n<=20肯定是状压或者搜索什么的 单独分析每个数,可能不选,选=>{在集合A,在集合B}

LYD729 537

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

【JZOJ4841】【NOIP2016提高A组集训第4场11.1】平衡的子集

题目描述夏令营有N个人,每个人的力气为M(i)。请大家从这N个人中选出若干人,如果这些人可以分成两组且两组力气之和完全相等,则称为一个合法的选法,问有多少种合法的选法?数据范围40%的数据满足:1<=M(i)<=1000; 对于100%的数据满足:2<=N<=20,1<=M(i)<=100000000解法40%枚举每一位选或不选,设当前选的所有数的和为sum,然后使用背包求出当前每个可能的总和。

=w= 528

{题解}[jzoj4841]【NOIP2016提高A组集训第4场11.1】平衡的子集

夏令营有N个人,每个人的力气为M(i)。请大家从这N个人中选出若干人,如果这些人可以分成两组且两组力气之和完全相等,则称为一个合法的选法,问有多少种合法的选法? 数据范围2<=N<=20,1<=M(i)<=100000000

FarmerJohn 634

2018暑假集训专题小结 Part5

目录 基础搜索算法 (Basic search algorithm) 复杂度玄学算法 (Uncertainty of Time Complexity) 正确性玄学算法 (Uncertainty of Correctness) 基础搜索算法 前言:此类算法一般是用来水部分分的。或者就是用来辅助一些算法。或者就是巧妙地利用题目性质做题,总之,很好用。 百度优先搜索 上百度找题解,可以解...

RainbowCrown_CGH's blog 518

【NOIP2016提高A组集训第4场11.1】平衡的子集

Description夏令营有N个人,每个人的力气为M(i)。请大家从这N个人中选出若干人,如果这些人可以分成两组且两组力气之和完全相等,则称为一个合法的选法,问有多少种合法的选法?Solution看到范围只有20,我已开始就打暴力,我以为可以快速判断是否合法,但是失败了。 正解超级机智。 中途相遇法:首先把这20个数拆成两个数集,然后每个点有三个值-1,0,1,那么很明显就是-1就把这个数放到

Facico的博客 1012
上一篇: Jzoj4840 小W砍大树
下一篇: Jzoj4838 I like Matrix!
扩展的灰
博客等级 码龄12年 60粉丝 342原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值