美文网首页
01背包——动态规划

01背包——动态规划

作者: pan_peter | 来源:发表于2023-05-22 20:20 被阅读0次

建立一个二维数组去记录最好的结果(把一个问题分为小的问题,求出小的问题最优解——一步一步的得出最终问题的最优解)


#include <stdio.h>

#define N 6  // 背包空间

// 物品
#define W 4  // 物品数量
int value[] = {7,3,5,2};   // 价值
int weight[] = {1,2,5,4};    // 重量

// 数组记录
int count[W+1][N+1] = {0};

void printResult(){
    int n,m;  // 两个for循环
    // 打印结果
    for(n=0; n<W+1; n++){
        for(m=0; m<N+1; m++){
            printf("%d ",count[n][m]);
        }
        printf("\n");
    }
}

void getBagResult(){
    int i,j;  // 两个for循环
    for(i=1; i<=W; i++){    // 遍历所有物品
        int nowWeight = weight[i-1];  // 当前物品的重量
        int nowValue = value[i-1];   // 当前价值
        for(j=1; j<=N; j++){   // 遍历从 1 - 10重量的情况
            // 如果可以加上当前物品——并且——加上后的价值大于之前记录的价值,则更新——不行则记录之前的!
            if(nowWeight<=j && nowValue + count[i-1][j-nowWeight] > count[i-1][j]){
                count[i][j] = nowValue + count[i-1][j-nowWeight];
            }else{
                count[i][j] = count[i-1][j];
            }
        }
    }
}

int main(){
    getBagResult();
    printResult();
    return 0;
}

相关文章

  • 算法学习收藏

    动态规划问题 动态规划(最优子结构和重叠子问题的比较) 动态规划解决01背包问题 01背包问题 最优二叉查找树 《...

  • 动态规划-01背包

    问题描述 有n个物品,它们有各自的体积和价值,现有给定容量的背包,如何让背包里装入的物品具有最大的价值总和?为方便...

  • 背包

    背包问题九讲笔记_01背包背包问题是动态规划中最基本的题目。 动态规划的4步骤:1.找出子结构2.递归3.自底而上...

  • 背包入门

    背包,是动态规划里一类典型的问题,主要有:01背包,完全背包,多重背包,混合背包,二维费用背包,分组背包,有依赖背...

  • 2.3 记录结果再利用的“动态规划”

    2.3.1 记忆化搜索与动态规划 1. 01背包问题 //// Created by Nathan on 15/...

  • 动态规划-01背包问题

    算法视频讲解 1.七月算法:http://v.youku.com/v_show/id_XMTQwMDMxMDA5N...

  • 动态规划之01背包

    例题 OpenJudge - 采药 二维写法 维度压缩(一维)[tui]

  • 动态规划——01背包问题

    背包问题(Knapsack problem) 是一种组合优化的NP完全问题。问题可以描述为:给定一组物品,每种物品...

  • 动态规划-01背包问题

    01背包问题 题目 有N件物品和一个容量为V的背包。第i件物品的费用是c[i],价值是w[i]。求解将哪些物品装入...

  • 动态规划—01背包问题

    01背包问题属于经典的动态规划问题,场景描述如下: 形象描述:贼,夜入豪宅,可偷之物甚多,而负重能力有限,偷哪些才...

网友评论

      本文标题:01背包——动态规划

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