优化二进制

最近在复习背包问题, 有重新想了一下二进制优化的背包问题, 我们为了保证答案的正确性, 首先要满足两个条件, 第一个条件是分成的几个数要满足相加和为n, 第二个条件是这几个数中要能够组成任意1 ~ n中任意的数字。

对于一个二进制数, 我们的枚举的方案, 首先是1,然后是10, 然后是100, 1000, 他们之间拼凑可以拼成任一个1111以内的数字, 推广至一般的二进制数, 看一个例子, 101, 这个数字在11 之前的数字一定都能够枚举出来,就是用1, 和10, 当然在101 和 11 之间的数字又该怎么办呢, 首先我们取这两个数的差值为 x, 我们可以枚举出11 之间的数字, 那么我们也可以枚举出 x ~ x + 11之间的所有数字, 我们右端点就是我们的目标值, 那么我们只要证明x <=11 就能证明二进制枚举的正确性,我们先看x 为何而来, 我们首先是枚举到11 然后发现 111 要比101 大, 如果我们要加上 100 的话, 这就不满足第一条性质了, 也就意味着 x 一定要比 100 小,那么我们就可以证明x <= 11 了。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值