湊單演算法 0 1揹包加一層迴圈

2021-10-10 03:01:29 字數 642 閱讀 5282

題目大意:你有一張滿金額k可用得免單券,購物車裡有n個東西。設計乙個演算法,選出若干件物品,使得總金額剛好大於等於k。輸出總金額即可,如果有多個結果只用輸出任意乙個

舉例:陣列n:[2,3,6,9,40,96],k=100。輸出101([2,3,96]),不用輸出具體的物品價值。

方法一:

深度搜尋,這個就不詳細講了,複雜度**。

方法二:

開始沒想到~~~睡眠很重要,腦子不清醒,啥都想不到

其實對於每個物品假設它的重量和價值相同就可以了。然後從把金額k當作揹包的初始可承受重量,並每次加1列舉。

如果獲取的最大價值和當前揹包可以承受的重量相同就可以跳出列舉可承受重量的迴圈了。

**:

#include #include #include #include using namespace std;

int findexact(vector& nums,int all_val)

}if(dp[len][i]==i) //如果獲取的最大價值和當前列舉的揹包可承受重量相同,就是結果

}return min_num;

}int main()

; int k=100;

cout

}

D Manga Market 思維加01揹包

並且,其中的a如果不等於0 那麼肯定a 1 如果在t 時間訪問完ai 那麼下乙個訪問完花費時間是 t 1 aj bj t 這就相當於兩倍的t還多 照這樣加些去,會變成4t 8t 幾何式增長,所以只要30次就夠了,然後考慮到還有a 0的,所以呢,如果訪問了i個a 1 的,再找到符合t時間a 0超時就行...

D Manga Market 思維加01揹包

並且,其中的a如果不等於0 那麼肯定a 1 如果在t 時間訪問完ai 那麼下乙個訪問完花費時間是 t 1 aj bj t 這就相當於兩倍的t還多 照這樣加些去,會變成4t 8t 幾何式增長,所以只要30次就夠了,然後考慮到還有a 0的,所以呢,如果訪問了i個a 1 的,再找到符合t時間a 0超時就行...

01揹包演算法

核心 狀態轉換方程 01揹包問題 容量為10的揹包,有5種物品,每種物品只有乙個,其重量分別為5,4,3,2,1,其價值分別為1,2,3,4,5。設計演算法,實現揹包內物品價值最大。如下 輸出14 include include using namespace std int main int v ...