码迷,mamicode.com
首页 > 其他好文 > 详细

0/1 背包

时间:2018-09-27 22:54:07      阅读:185      评论:0      收藏:0      [点我收藏+]

标签:output   产生   size   imu   http   val   cout   ota   src   

技术分享图片?

#include <iostream>
#include <vector>
using namespace std;
/*
 * 有 N 件物品和一个容量为C的背包, 第i件物品的体积是 W[i],价值是 V[i]。
 * 求解将哪些物品装入背包可使这些物品的重量总和不超过背包容量,且价值总和最大。
 */
int main () {
    vector<int> weights {4, 6, 2, 2, 5, 1};
    vector<int> values {8, 10, 6, 3, 7, 2};  // output 24
    int total_capacity = 12;
    auto num = weights.size();

    if (total_capacity <= 0) {
        cout << 0 << endl;
        return 0;
    }
    // maximum_value[i][j] 的含义:
    // 将前 i 个物品中的一些物品装入容量为 j 的背包所能产生的最大价值
    vector<vector<int>> maximum_value(num+1, vector<int>(total_capacity+1, 0));
    for (int i_item = 1; i_item < num+1; i_item++) {
        for (int volume = 1; volume <= total_capacity; volume++) {
            if (weights[i_item-1] > volume) {
                maximum_value[i_item][volume] = maximum_value[i_item-1][volume];
            } else {
                maximum_value[i_item][volume] = max(maximum_value[i_item-1][volume],
                                      maximum_value[i_item-1][volume-weights[i_item-1]]
                                      +values[i_item-1]);
            }
        }
    }
    cout << maximum_value[num-1][total_capacity];
    return 0;
}

0/1 背包

标签:output   产生   size   imu   http   val   cout   ota   src   

原文地址:https://www.cnblogs.com/nowgood/p/01parkage.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!