NOI買表題解

在這裏插入圖片描述

題解:

暴力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;
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章