zoukankan      html  css  js  c++  java
  • 0/1背包问题

    问题描述

    设U = {u1,u2,u3,......ui}(一共有amount数量的物品)一组物品准备放入容量为size的背包中。

    定义每个物品都具有两个属性weight和value.

    问题是在所选取的物品总重量不超过背包容量size的前提下使所选的物品总价值最大.

    程序的设计

    设V[i, j]用来表示从前i项{u1......ui}中取出来的装入体积为j的背包的最大价值.i:[0,amount],j:[0,size].

    计算的值就是V[amount, size].

    V[0, j]对于所有的j的值都是0,因为这时候的包中没有物品.

    V[i, 0]的值也是0,因为没有物品可以放到size为0的背包里面.

    V[i, j] = 0 若i = 0 或 j = 0;

    V[i, j] = V[i - 1, j] 若j < ui.weight;(当物品的重量大于背包承重时,就不把物品放在里面)

    V[i, j] = max{ V [ i - 1, j ] , V[ i - 1, j - ui.weight ] + ui.value } 若i > 0并且j >= ui.weight;

    以上三个式子+动态规划就可以解决问题了,但是也有缺陷:以上所设计的数均只能为整数;容量size可能很大

  • 相关阅读:
    计算机基础知识
    markdown简介及基本语法
    session和cookie的区别
    MySQL的游标
    数据库单表查询
    外键(有无级联)
    mysql
    数据库引擎
    守护进程和守护线程的区别
    快排等
  • 原文地址:https://www.cnblogs.com/eavn/p/1805389.html
Copyright © 2011-2022 走看看