zoukankan      html  css  js  c++  java
  • php动态规划

    问题:假设有一个背包的负重最多可达8公斤,而希望在背包中装入负重范围内可得之总价物品,假设是水果好了,水果的编号、单价与重量如下所示:
    1 栗子 4KG $4500
    2 苹果 5KG $5700
    3 橘子 2KG $2250
    4 草莓 1KG $1100
    5 甜瓜 6KG $6700
    分析:背包问题是关于最佳化的问题,要解最佳化问题可以使用「动态规划」(Dynamic programming),从空集合开始,每增加一个元素就先求出该阶段的最佳解,直到所有的元素加入至集合中,最后得到的就是最佳解。
    源码:

    //背包承重上限
    $limit = 8;
    //物品种类
    $total = 5;
    //物品
    $array = array(
                array("栗子", 4, 4500),
                array("苹果", 5, 5700),
                array("橘子", 2, 2250),
                array("草莓", 1, 1100),
                array("甜瓜", 6, 6700)
                );
    //存放物品的数组
    $item = array_fill(0, $limit + 1, 0);
    //存放价值的数组
    $value = array_fill(0, $limit + 1, 0);
    $p = $newvalue = 0;         
    for ($i = 0; $i < $total; $i++) {
        for ($j = $array[$i][1]; $j <= $limit; $j++) {
            $p = $j - $array[$i][1];
            $newvalue = $value[$p] + $array[$i][2];
            //找到最优解的阶段
            if ($newvalue > $value[$j]) {
                $value[$j] = $newvalue;
                $item[$j] = $i;
            }
        }
    }
    echo "物品  价格<br />";
    for ($i = $limit; 1 <= $i; $i = $i - $array[$item[$i]][1]) {
        echo $array[$item[$i]][0] . "  " . $array[$item[$i]][2] . "<br />";
    }
    echo "合计  " . $value[$limit];
  • 相关阅读:
    Mysql性能优化
    PHP IF判断简写
    PHP与MYSQL事务处理
    js获取select标签选中的值
    oralce 的安装以及plsql的配置的html连接
    mysql 中启动服务的命令 、登录命令、退出命令 mysql 的常用命令
    oracle 中 某个字段的长度不够的sql 语句
    随机获得id的方法
    java中解析excel 批量插入数据库
    java 调用存储过程
  • 原文地址:https://www.cnblogs.com/zh718594493/p/13953460.html
Copyright © 2011-2022 走看看