PHP动态规划解决0-1背包问题实例分析


Posted in PHP onMarch 23, 2015

本文实例分析了PHP动态规划解决0-1背包问题。分享给大家供大家参考。具体分析如下:

背包问题描述:一个承受最大重量为W的背包,现在有n个物品,每个物品重量为t, 每个物品的价值为v。
要使得这个背包重量最大(但不能超过W),同时又需要背包的价值最大。

思路:定义一个二维数组,一维为物品数量(表示每个物品),二维是重量(不超过最大,这里是15),下面数组a,
动态规划原理思想,max(opt(i-1,w),wi+opt(i-1,w-wi)) 当中最大值,
opt(i-1,w-wi)指上一个最优解

<?php
//这是我根据动态规划原理写的
// max(opt(i-1,w),wi+opt(i-1,w-wi))
//背包可以装最大的重量
$w=15;
//这里有四件物品,每件物品的重量
$dx=array(3,4,5,6);
//每件物品的价值
$qz=array(8,7,4,9);
//定义一个数组
$a=array();
//初始化
for($i=0;$i<=15;$i++){ $a[0][$i]=0; }
for ($j=0;$j<=4;$j++){ $a[$j][0]=0; }
//opt(i-1,w),wi+opt(i-1,w-wi)
for ($j=1;$j<=4;$j++){
  for($i=1;$i<=15;$i++){
    $a[$j][$i]=$a[$j-1][$i];
    //不大于最大的w=15
    if($dx[$j-1]<=$w){
      if(!isset($a[$j-1][$i-$dx[$j-1]])) continue;
      //wi+opt(i-1,wi)
      $tmp = $a[$j-1][$i-$dx[$j-1]]+$qz[$j-1];
      //opt(i-1,w),wi+opt(i-1,w-wi) => 进行比较 
      if($tmp>$a[$j][$i]){
        $a[$j][$i]=$tmp;
      }
    }
  }
}
//打印这个数组,输出最右角的值是可以最大价值的
for ($j=0;$j<=4;$j++){
  for ($i=0;$i<=15;$i++){
    echo $a[$j][$i]."/t";
    } echo "/n";
}
?>

希望本文所述对大家的php程序设计有所帮助。

PHP 相关文章推荐
社区(php&amp;&amp;mysql)四
Oct 09 PHP
浅析PHP水印技术
Feb 14 PHP
php简单封装了一些常用JS操作
Feb 25 PHP
安装PHP可能遇到的问题“无法载入mysql扩展” 的解决方法
Apr 16 PHP
PHP的explode和implode的使用说明
Jul 17 PHP
解析PHP强制转换类型及远程管理插件的安全隐患
Jun 30 PHP
PHP预定义变量9大超全局数组用法详解
Apr 23 PHP
PHP中串行化用法示例
Nov 16 PHP
PHP获取链表中倒数第K个节点的方法
Jan 18 PHP
php时间戳转换代码详解
Aug 04 PHP
laravel config文件配置全局变量的例子
Oct 13 PHP
PHP7原生MySQL数据库操作实现代码
Jul 03 PHP
php找出指定范围内回文数且平方根也是回文数的方法
Mar 23 #PHP
PHP判断一个字符串是否是回文字符串的方法
Mar 23 #PHP
PHP输出两个数字中间有多少个回文数的方法
Mar 23 #PHP
php使用正则表达式进行字符串搜索的方法
Mar 23 #PHP
分享十款最出色的PHP安全开发库中文详细介绍
Mar 22 #PHP
Codeigniter检测表单post数据的方法
Mar 21 #PHP
codeigniter发送邮件并打印调试信息的方法
Mar 21 #PHP
You might like
ThinkPHP3.1数据CURD操作快速入门
2014/06/19 PHP
PHP上传图片类显示缩略图功能
2016/06/30 PHP
php禁用cookie后session设置方法分析
2016/10/19 PHP
PHP正则匹配反斜杠'\'和美元'$'的方法
2017/02/08 PHP
PHP编程获取图片的主色调的方法【基于Imagick扩展】
2017/08/02 PHP
laravel5.4利用163邮箱发送邮件的步骤详解
2017/09/22 PHP
php面向对象重点知识分享
2019/09/27 PHP
laravel高级的Join语法详解以及使用Join多个条件
2019/10/16 PHP
javascript 弹出的窗口返回值给父窗口具体实现
2013/11/23 Javascript
JavaScript的arguments对象应用示例
2014/09/15 Javascript
使用Node.js为其他程序编写扩展的基本方法
2015/06/23 Javascript
原生javascript实现自动更新的时间日期
2016/02/12 Javascript
jQuery ready()和onload的加载耗时分析
2016/09/08 Javascript
JS实现倒计时(天数、时、分、秒)
2016/11/16 Javascript
vue2.0获取自定义属性的值
2017/03/28 Javascript
JavaScript强制类型转换和隐式类型转换操作示例
2019/05/01 Javascript
Vue中的组件及路由使用实例代码详解
2019/05/22 Javascript
微信小程序如何调用图片接口API并居中显示
2019/06/29 Javascript
Python使用multiprocessing创建进程的方法
2015/06/04 Python
Python基于Tkinter的HelloWorld入门实例
2015/06/17 Python
Python中将字典转换为列表的方法
2016/09/21 Python
Python分析学校四六级过关情况
2017/11/22 Python
详解在Python中以绝对路径或者相对路径导入文件的方法
2019/08/30 Python
基于django micro搭建网站实现加水印功能
2020/05/22 Python
Python更改pip镜像源的方法示例
2020/12/01 Python
HTML5给汉字加拼音收起展开组件的实现代码
2020/04/08 HTML / CSS
Amara美国站:英国高端家居礼品网站,世界各地的奢侈家具品牌
2017/07/26 全球购物
Solid & Striped官网:美国泳装品牌
2019/06/19 全球购物
《水乡歌》教学反思
2014/04/24 职场文书
敬老模范事迹
2014/05/21 职场文书
肖申克救赎观后感
2015/06/02 职场文书
运动会跳远广播稿
2015/08/19 职场文书
如何用JavaScript检测当前浏览器是无头浏览器
2021/04/27 Javascript
python plt.plot bar 如何设置绘图尺寸大小
2021/06/01 Python
总结Python变量的相关知识
2021/06/28 Python
对讲机知识
2022/04/07 无线电