• 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];
  • 相关阅读:
    iOS初级博客的链接
    代理参数问题的思考
    数组里面的选择排序与起泡排序比较
    【C语言】02-函数
    【C语言】01-第一个c程序代码分析
    响应者链的事件分发
    UIController中view的记载流程
    UITabBar的定制
    CommandTabel_代理方法
    来到博客园
  • 原文地址:https://www.cnblogs.com/zh718594493/p/13953460.html
Copyright © 2020-2023  润新知