目錄
輸出
首頁 後端開發 C++ 使用分支限界法在C/C++中實現0/1背包問題

使用分支限界法在C/C++中實現0/1背包問題

Sep 04, 2023 pm 08:17 PM
c/c 分支限界 /背包問題

使用分支限界法在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中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

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

在C/C++中,strcmp()函數用於比較兩個字串 在C/C++中,strcmp()函數用於比較兩個字串 Sep 10, 2023 am 11:41 AM

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

在C/C++中,fseek()函數用於在檔案中移動檔案指標的位置 在C/C++中,fseek()函數用於在檔案中移動檔案指標的位置 Sep 02, 2023 pm 03:57 PM

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

使用分支限界法在C/C++中實現0/1背包問題 使用分支限界法在C/C++中實現0/1背包問題 Sep 04, 2023 pm 08:17 PM

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

如何在C/C++中偵測整數溢位? 如何在C/C++中偵測整數溢位? Aug 31, 2023 pm 01:53 PM

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

一些關於C/C++三元運算子的有趣觀察 一些關於C/C++三元運算子的有趣觀察 Sep 15, 2023 pm 07:29 PM

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

貪心演算法的C/C++程序,用於找到最少硬幣數量 貪心演算法的C/C++程序,用於找到最少硬幣數量 Sep 19, 2023 pm 11:01 PM

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

如何在C/C++中使用枚舉? 如何在C/C++中使用枚舉? Aug 28, 2023 pm 05:09 PM

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

在C/C++中,4維數組 在C/C++中,4維數組 Sep 01, 2023 pm 11:57 PM

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

See all articles