一道谷歌測試題 揹包變體

有n個桶,每個桶裏有a[i]個硬幣,不能同時取相鄰兩個桶裏的硬幣,一個桶裏的硬幣要麼取完,要麼不取,揹包容量爲num,也就是最多取num個硬幣。

輸出最多能取多少個硬幣

範圍:1<=n<=10000, 1<=a[i]<=1000,0<=num<=1000

 

bool dp[1005][2];
dp[0][0]=true;
for(int i=1;i<=n;i++){
	for(int j=num;j>=0;j--){
		dp[j][0]=dp[j][0]|dp[j][1]
            if(j>=a[i])
		dp[j][1]=dp[j-a[i]][0]
	}
}
for(int i=num;i>=0;i--){
	if(dp[i][0]||dp[i][1]){
		printf("%d\n",i);break;
	}
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章