完全背包

来源:互联网 发布:淘宝分销订单怎么处理 编辑:程序博客网 时间:2024/06/05 01:46

res[i][j] = max(res[i - 1][j], res[i][j - weight[i]] + value[i]);

核心递推式

res[i][j] = max(res[i - 1][j], res[i][j - weight[i]] + value[i]);



以下代码可以复制直接执行!

res[i][j] 表示最大价值    i表示第几个物品  j表示重量 




#include "stdafx.h"

#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
    int value[5] = { 0,1,3,5,9 };
    int weight[5] = { 0,2,3,4,7 };
    //物品个数   重量
    int res[5][11] = { 0 };



    for (int i = 0; i <= 4; i++)
    {
        res[i][0] = 0;
    }

    for (int j = 0; j <= 11; j++)
    {
        res[0][j] = 0;
    }

    for (int i = 1; i <= 4; i++)
    {
        for (int j = 1; j <= 10; j++)
        {
            //这个条件一定要写准
            if (j >= weight[i])
            {
                res[i][j] = max(res[i - 1][j], res[i][j - weight[i]] + value[i]);
            }
            else
                res[i][j] = res[i - 1][j];
            

            //cout << res[i][j] << endl;
        }
        cout << endl;
    }

    for (int i = 0; i <= 4; i++)
    {
        cout << "number:" << i << "\t" << endl;
        for (int j = 0; j <= 10; j++)
        {
            cout << res[i][j] << "\t";
        }

        cout << endl;
    }
原创粉丝点击