简单背包问题c语言

与银河邂逅

背包问题是组合优化中的一个经典问题,它属于NP完全问题。简单背包问题可以描述为:给定一组物品,每个物品有一定的价值和重量,和一个背包,背包能承受的最大重量是限定的。目标是选择一组物品放入背包中,使得背包中的物品总价值最大,但总重量不超过背包的容量限制。

问题定义

  1. 物品集合:有n个物品,每个物品i有相应的价值v[i]和重量w[i]
  2. 背包容量:背包可以承受的最大重量为W
  3. 目标:选择物品放入背包中,使得背包中物品的总价值最大,同时总重量不超过W

解决方法

解决简单背包问题的方法有很多,包括贪心算法、动态规划等。

贪心算法

贪心算法按照单位重量价值(价值除以重量)从高到低选择物品,直到无法再添加更多物品为止。这种方法简单,但并不总能得到最优解。

#include 

int main() {
    int v[] = {60, 100, 120}; // 物品价值
    int w[] = {10, 20, 30};   // 物品重量
    int W = 50;               // 背包容量
    int n = sizeof(v) / sizeof(v[0]); // 物品数量
    int i, j, totalValue = 0, totalWeight = 0;
    
    // 按单位重量价值排序
    for (i = 0; i < n - 1; i  ) {
        for (j = 0; j < n - i - 1; j  ) {
            if ((double)v[j] / w[j] < (double)v[j   1] / w[j   1]) {
                // 交换价值和重量
                int temp = v[j];
                v[j] = v[j   1];
                v[j   1] = temp;
                temp = w[j];
                w[j] = w[j   1];
                w[j   1] = temp;
            }
        }
    }
    
    // 选择物品
    for (i = 0; i < n 
版权声明:本页面内容旨在传播知识,为用户自行发布,若有侵权等问题请及时与本网联系,我们将第一时间处理。E-mail:284563525@qq.com

目录[+]

取消
微信二维码
微信二维码
支付宝二维码