使用分支限界法在C/C++中實現0/1背包問題
這個想法是為了實現貪婪方法為分數背包問題提供最佳解決方案這一事實。
為了檢查特定節點是否可以為我們提供更好的解決方案,我們計算最佳解決方案(透過節點)實作貪心方法。如果貪心法本身計算出的解比目前為止最好的解要多,那麼我們就無法透過節點獲得更好的解。
完整的演算法如下 -
根據每單位重量的價值比率的降序對所有項目進行排序,以便可以使用貪心法計算上限。
初始化最大利潤,例如 maxProfit = 0
建立一個空隊列 Q。
決策虛擬節點建立樹並將其插入或排隊到 Q。虛擬節點的利潤和權重為 0。
-
當 Q 不空或為空時執行下列操作。
建立了 Q 中的項目。設提取項為u。
計算下一級節點的利潤。如果利潤高於maxProfit,則修改maxProfit。
計算下一級節點的界限。如果bound高於maxProfit,則將下一級節點加入Q。
考慮下一級節點不被視為或考慮為解決方案的一部分的情況,並將節點添加到隊列的層級為下一級,但權重和利潤不處理或考慮下一級節點。
下面給出的插圖 -
輸入// First thing in every pair is treated as weight of item // and second thing is treated as value of item Item arr1[] = {{2, 40}, {3.14, 50}, {1.98, 100}, {5, 95}, {3, 30}}; Knapsack Capacity W1 = 10
輸出
The maximum possible profit = 235
以上是使用分支限界法在C/C++中實現0/1背包問題的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

熱門話題

函數strcmp()是內建函式庫函數,在「string.h」頭檔中宣告。該函數用於比較字串參數。它按字典順序比較字串,這意味著它逐個字元地比較字串。它啟動comp

fseek()在C語言中用於將檔案指標移到特定位置。偏移量和流是指標的目標,它們在函數參數中給出。如果成功,它會傳回零。如果不成功,它會傳回非零值。以下是C語言中fseek()的語法:intfseek(FILE*stream,longintoffset,intwhence)這裡是在fseek()中使用的參數:stream−這是用來識別流的指標。 offset−這是從位置開始的位元組數。 whence−這是偏移量添加的位置。 whence由以下常數

這個想法是為了實現貪婪方法為分數背包問題提供最佳解決方案。為了檢查特定節點是否可以為我們提供更好的解決方案,我們計算最佳解決方案(透過節點)實施貪心方法。如果貪心法本身計算出的解比目前為止最好的解要多,那麼我們就無法透過節點獲得更好的解。完整的演算法如下-根據每單位重量的價值比率的降序對所有項目進行排序,以便可以使用貪心法計算上限。初始化最大利潤,例如maxProfit=0建立一個空隊列Q。決策虛擬節點建立樹並將其插入或排隊到Q。虛擬節點的利潤和權重為0。當Q不空或為空時執行以下操作。創建

唯一安全的方法是在溢位發生之前進行檢查。雖然有一些不正規的方法可以檢查整數溢位。所以,如果你的目標是偵測無符號整數相加的溢出,你可以檢查結果是否實際上小於兩個相加的值。例如,範例程式碼unsignedintx,y;unsignedintvalue=x+y;booloverflow=value<x;//Alternatively"value<y"shouldalsowork這是因為如果x和y都是無符號整數,如果相加後溢出,它們的值不能大於它們中的任何一個,因為它們需要

我們知道三元運算子是取代if..else子句實作的。它由?:表示。 '? '符號相當於if部分,':'相當於else部分。以下3個程式解釋了三元運算子情況下的一些有趣的觀察。以下程式能夠編譯,沒有任何錯誤。三元表達式的回傳類型預計為float(與exp2一樣),且exp3(即文字零-int型別)能夠隱式轉換為float。 #include<iostream>usingnamespacestd;intmain(){ inttest1=0;&

貪心演算法是一種用於尋找給定問題的最優解決方案的演算法。貪婪演算法的工作原理是找到每個部分的局部最優解(問題的一部分的最優解),因此表明可以找到全局最優解。在這個問題中,我們將使用貪婪演算法演算法來找到可以組成給定總和的最小硬幣/紙幣數量。為此,我們將考慮所有有效的硬幣或紙幣,即面額為{1,2,5,10,20,50,100,200,500,2000}。我們需要返回需要補足總的硬幣/紙幣的數量。讓我們舉幾個例子來更好地理解上下文-範例1-Input:1231Output:7說明-我們需要兩張500盧比紙幣

枚舉是C語言中的使用者定義資料型別。它用於給整數常數賦予名稱,使程式易於閱讀和維護。關鍵字“enum”用於聲明一個枚舉。以下是C語言中枚舉的語法:enumenum_name{const1,const2,.......};Theenumkeywordisalsousedtodefinethevariablesofenumtype.Therearetwowaystodefinethevariablesofenumtypeasfollows.enumweek{sunday,monday,tuesday,

一個4維數組是由3維數組組成的數組。演算法Begin.Declarethevariables.Declarethearrayelements.Takethenoofelementsasinput.Taketheelementsasinput.Printtheelementsstoredinarray.End.這是一個4D陣列的範例。 #include<iostream>usingnamespacestd;intmain(){ inta[2][2][3
