动态规划C语言

#include <stdio.h>
#include <stdlib.h>
//0-1背包问题是一种经典的组合优化问题,
//问题描述为:有一个给定容量的背包和一组具有不同价值和重量的物品,如何选择物品放入背包中,以使得背包中物品的总价值最大化,同时不超过背包的容量限制。
#define max(a, b) ((a) > (b) ? (a) : (b))

int knapsack(int W, int wt[], int val[], int n) {//背包函数这是一个名为knapsack的函数,它接受四个参数:
//W:表示背包的总容量。
//wt[]:一个整数数组,表示每个物品的重量。
//val[]:一个整数数组,表示每个物品的价值。
//n:表示物品的数量。
    int i, w;
    int K[n+1][W+1];  // 填充 K()() 数组

    for (i = 0; i <= n; i++) {//遍历每个物品 
        for (w = 0; w <= W; w++) {//遍历背包容量 
            if (i == 0 || w == 0) {
                K[i][w] = 0;
            } else if (wt[i-1] <= w) {// 如果物品i的重量wt[i-1]小于等于背包容量w,
                K[i][w] = max(val[i-1] + K[i-1][w-wt[i-1]], K[i-1][w]);
                //可以将物品i放入背包,或者不放入背包。在这两种情况下,选择能够获得更大总价值的方案,并将对应的价值存储在K[i][w]中。

            } else {//如果物品i的重量wt[i-1]大于背包容量w,那么物品i无法放入背包,因此K[i][w]的值保持不变,即等于K[i-1][w]。

                K[i][w] = K[i-1][w];
            }
        }
    }
    return K[n][W];//即表示在给定背包容量和物品重量、价值的情况下,能够装入背包的物品的最大总价值。

}

int main() {
    int val[] = {60, 100, 120};
    int wt[] = {10, 20, 30};
    int W = 50;
    int n = sizeof(val) / sizeof(val[0]);//物品的数量 

    printf("背包中能装的最大价值为:%d\n", knapsack(W, wt, val, n));

    return 0;
}

相关推荐

  1. 动态规划C语言

    2024-02-09 14:02:02       39 阅读
  2. C语言入门算法——爬楼梯(了解动态规划

    2024-02-09 14:02:02       88 阅读
  3. 算法——C/动态规划

    2024-02-09 14:02:02       52 阅读
  4. C--动态规划

    2024-02-09 14:02:02       38 阅读
  5. c++课堂——动态规划

    2024-02-09 14:02:02       29 阅读
  6. 动态规划——买卖股票C++

    2024-02-09 14:02:02       42 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-02-09 14:02:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-02-09 14:02:02       100 阅读
  3. 在Django里面运行非项目文件

    2024-02-09 14:02:02       82 阅读
  4. Python语言-面向对象

    2024-02-09 14:02:02       91 阅读

热门阅读

  1. Jetpack Room使用

    2024-02-09 14:02:02       47 阅读
  2. 开源软件:引领技术创新与商业模式转型

    2024-02-09 14:02:02       50 阅读
  3. 2024年GPT如何发展?

    2024-02-09 14:02:02       49 阅读
  4. 开源软件的未来发展趋势与应对新挑战和机遇

    2024-02-09 14:02:02       59 阅读
  5. 问题 | 开源软件的影响力

    2024-02-09 14:02:02       42 阅读
  6. Git学习

    Git学习

    2024-02-09 14:02:02      50 阅读
  7. FastAPI使用异步motor实现对mongodb的增删改查

    2024-02-09 14:02:02       57 阅读