题解:

暴力50%(不过我50不是暴力,而是数据开小了):

把它当成一个无脑 的暴力01背包问题,把kik_iaia_i当成单纯的kik_iaia_i,时间复杂度为O(kik_i* aia_i*tit_i)。

二进制优化背包100%:

如果想让kik_iaia_i不是单纯的kik_iaia_i,那就需要二进制优化

首先,我们知道20+21+……2n=2n+1-1,且用20,21……2n,可以组成2n+1以下的所有整数,且绝不超2n+1
然后,根据上面的的定理,我们就能得到2n+1-1的优化,但别的呢???
我们再放一个kik_i-(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;

相关文章:

  • 2021-10-16
  • 2022-12-23
  • 2021-06-20
  • 2021-05-15
  • 2022-12-23
  • 2022-12-23
  • 2021-10-25
  • 2022-12-23
猜你喜欢
  • 2021-10-14
  • 2021-09-28
  • 2021-06-08
  • 2022-12-23
  • 2022-12-23
  • 2021-07-30
  • 2022-12-23
相关资源
相似解决方案