91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

C++數據結構背包問題怎么解決

c++
小億
82
2023-10-24 00:58:21
欄目: 編程語言

在C++中,可以使用數組或者鏈表來實現背包問題的解決。

首先,定義一個結構體或者類來表示物品,包括物品的重量和價值等信息。

然后,定義一個數組或者鏈表來表示背包的容量和當前放入背包的物品。

接下來,可以使用動態規劃的思想來解決背包問題。定義一個二維數組dp,其中dp[i][j]表示在前i個物品中,背包容量為j時的最大價值。

從第一個物品開始遍歷,對于每一個物品,分兩種情況考慮:放入背包或者不放入背包。

如果放入背包,即dp[i][j] = dp[i-1][j-w[i-1]] + v[i-1],其中w[i-1]表示第i個物品的重量,v[i-1]表示第i個物品的價值。

如果不放入背包,即dp[i][j] = dp[i-1][j]。

取以上兩種情況的最大值作為dp[i][j]的值。

最后,背包問題的解為dp[n][c],其中n表示物品的個數,c表示背包的容量。

以下是一個使用數組實現的C++代碼示例:

#include <iostream>
#include <vector>
using namespace std;

struct Item {
    int weight;
    int value;
};

int knapsack(vector<Item>& items, int capacity) {
    int n = items.size();
    vector<vector<int>> dp(n + 1, vector<int>(capacity + 1, 0));

    for (int i = 1; i <= n; i++) {
        for (int j = 1; j <= capacity; j++) {
            if (items[i - 1].weight <= j) {
                dp[i][j] = max(dp[i - 1][j], dp[i - 1][j - items[i - 1].weight] + items[i - 1].value);
            }
            else {
                dp[i][j] = dp[i - 1][j];
            }
        }
    }

    return dp[n][capacity];
}

int main() {
    vector<Item> items{{2, 3}, {3, 4}, {4, 5}, {5, 6}};
    int capacity = 8;
    int max_value = knapsack(items, capacity);
    cout << "The maximum value is: " << max_value << endl;
    return 0;
}

在該示例中,物品的重量和價值分別用數組items表示,背包的容量用變量capacity表示。函數knapsack即為解決背包問題的函數,返回背包中可以獲得的最大價值。

運行該代碼,輸出結果為:

The maximum value is: 9

0
凌源市| 广平县| 霍州市| 新疆| 铜山县| 连平县| 玉林市| 浮山县| 若羌县| 蒙阴县| 古交市| 东方市| 连云港市| 洮南市| 汉中市| 滨州市| 丹凤县| 吉林省| 乳山市| 融水| 高平市| 招远市| 象州县| 呼伦贝尔市| 万盛区| 沈阳市| 开封县| 新兴县| 临沂市| 五大连池市| 齐河县| 绥中县| 塔城市| 沙坪坝区| 兴业县| 河源市| 长乐市| 陵川县| 秭归县| 汾阳市| 封开县|