美文网首页
0-1背包问题——递归与动态规划

0-1背包问题——递归与动态规划

作者: lpcarl | 来源:发表于2021-05-27 14:47 被阅读0次
#include<iostream>
using namespace std;

int best_solution(int i,int c,int values[],int  weights[])//i表示拿入几个商品,c表示容量
{
    if (i == 0 || c == 0)return 0;//递归出口
    if (weights[i] > c)return best_solution(i - 1, c, values, weights);//容量太大,舍弃

    //放得下,需要考虑是否放下能得到最大
    int tmp1 = best_solution(i - 1, c, values, weights);//不放
    int tmp2 = best_solution(i - 1, c - weights[i], values, weights) + values[i];
    int result = tmp1>tmp2?tmp1:tmp2;
    return result;
}

void best_solution2(int bestarr[5][11], int values[], int weight[])
{
    for (int i = 0; i < 5; i++){bestarr[i][0] = 0;}
    for (int i = 0; i < 11; i++) { bestarr[0][i] = 0; }
    for (int i = 1; i < 5; i++)
    {
        for (int j = 1; j < 11; j++)
        {
            if (j < weight[i])//容量够
                bestarr[i][j] = bestarr[i - 1][j];
            else
            {
                if (bestarr[i - 1][j] > bestarr[i - 1][j - weight[i]] + values[i])
                {
                    bestarr[i][j] = bestarr[i - 1][j];
                }
                else
                {
                    bestarr[i][j] = bestarr[i - 1][j - weight[i]] + values[i];
                }

            }
        }
    }
}
void print(int best_s[5][11])
{
    for (int i = 0; i < 5; i++) 
    {
        for (int j = 0; j < 11; j++) 
        { 
            cout << "   " << best_s[i][j];
        }
        cout << endl;
    }
}
int main(int* argc, int* argv[])
{
    int values[5] = { 0,2,4,3,7 };
    int weights[5] = { 0,2,3,5,5 };
    int result = best_solution(4,10, values, weights);
    cout << result << endl;

    int best_s[5][11];
    best_solution2(best_s, values, weights);
    print(best_s);
}

相关文章

  • 动态规划

    0-1背包问题 自己实现的0-1背包问题的动态规划解法,先贴上吧,动态规划原理解释有空再写。

  • 初识动态规划

    0-1 背包问题 备忘录 动态规划-二维数组 动态规划-一维数组 0-1 背包问题升级版 回溯算法 动态规划-二维...

  • Algorithm进阶计划 -- 动态规划(下)

    经典动态规划背包问题最长子序列问题 1. 背包问题 1.1 0-1 背包问题 0-1 背包问题,描述如下: 上面...

  • 数据结构与算法笔记day23:动态规划

    1初识动态规划 这节课的内容不涉及动态规划的理论,而是通过两个例子:0-1背包问题、0-1背包问题升级...

  • 算法-动态规划-背包问题

    背包问题是基础的动态规划问题,包含了0-1背包,完全背包,多重背包等。 0-1背包 存在容量为 的背包 , 件体...

  • 背包问题

    背包问题属于典型的动态规划问题。这里我们将详细介绍0-1背包,完全背包和多重背包问题 一、 0-1背包 有N件物品...

  • 0-1背包问题——递归与动态规划

  • 背包问题

    1、前言 背包问题是典型的动态规划问题,它有非常多的类型,本文讨论最常见的0-1背包问题 0-1背包问题描述:有一...

  • Algorithm

    bit manipulation 动态规划 0-1背包问题 寻找最小的k个数

  • 算法3:动态规划

    5.动态规划5.1 什么是动态规划?5.2 自底向上的动态规划:5.3 自顶向下的动态规划5.4 0-1背包问题:...

网友评论

      本文标题:0-1背包问题——递归与动态规划

      本文链接:https://www.haomeiwen.com/subject/jvtdsltx.html