
题解:
暴力50%(不过我50不是暴力,而是数据开小了):
把它当成一个无脑 的暴力01背包问题,把kik_iki个aia_iai当成单纯的kik_iki个aia_iai,时间复杂度为O(kik_iki* aia_iai*tit_iti)。
二进制优化背包100%:
如果想让kik_iki个aia_iai不是单纯的kik_iki个aia_iai,那就需要二进制优化。
首先,我们知道20+21+……2n=2n+1-1,且用20,21……2n,可以组成2n+1以下的所有整数,且绝不超2n+1。
然后,根据上面的的定理,我们就能得到2n+1-1的优化,但别的呢???
我们再放一个kik_iki-(2n+1-1),再配上前面的就可以组成别的数了。
放一个二进制优化的代码:
int q=read(),p=read(),k=1;
while(k<=p){
w[++w[0]]=k*q;
p-=k;
k*=2;
}
if(p!=0)
w[++w[0]]=p*q;
648

被折叠的 条评论
为什么被折叠?



