【C++】0-1背包问题

建立一个二维数组 cost[][],其中cost[i][j]代表的是前i个货物房屋大小为j的背包的总价值

代码如下:

#include 
#include 

using namespace std;

typedef struct {
    int carry;
    int value;
}Good;

int get_max(int a, int b)
{
    return (a>b) ? a : b;
}

int package(vector& goods, int total_carry)
{
    int length = goods.size();
    int cost[length+1][total_carry+1];

    for(int i=0; i<=length; i++){
        for (int j=0; j<=total_carry; j++){
            /* cost[i][j]表示前i个货物放入总载荷为j的背包时的总价值 */
            if(i*j == 0){   // i和j中有一个为0,没有货物或者没有背包的情况
                cost[i][j] = 0;
            }
            else{
                if (goods[i].carry > j) cost[i][j]=cost[i-1][j];    // 货物放不进去的情况
                else{
                    cost[i][j] = get_max(cost[i-1][j], cost[i-1][j-goods[i].carry]+goods[i].value);
                }
            }
        }
    }

    return cost[length][total_carry];
}

int main() {
    vector goods = {{71, 100}, {69, 1}, {1,2}};
    cout << package(goods, 70) << endl;
}

你可能感兴趣的:(算法设计与分析,c++,算法,开发语言)