?OJ 集合子集不能拼出的最小数

博客围绕给定集合,求解不能由该集合子集拼出的最小数。通过样例展示求解结果,给出先对集合元素排序,再用归纳法假证的思路,找到满足特定条件的元素,得出答案,还指出思路类似多重背包的二进制拆分。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题意:

给定一个集合,求不能由该集合子集拼出的最小数。

样例:

{2,5,1}

1,2,3均可以拼出,4不能拼出,故答案是4.

思路:

先把集合元素从小到大排序,首先,假设第1个数必须是1,否则答案就是1.

归纳法假证

x=1时可以拼出1.(第1项满足)

对于任意x(x>=2),令s=Σ a(i), i∈[1,x-1] ,如果1~a(i)-1均能拼出(即s>=a(i)-1),加一个a(i)可以拼出1~s+a(i).

因此:方法就是找第一个a(x),满足s=Σ a(i), i∈[1,x-1],满足s<=a(i)-2.这时s+1就是答案。

这个思路类似于多重背包的二进制拆分

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值