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 EOT定界符的使用详解
Sep 30 PHP
单一index.php实现PHP任意层级文件夹遍历(Zjmainstay原创)
Jul 31 PHP
Linux系统递归生成目录中文件的md5的方法
Jun 29 PHP
php无限分类使用concat如何实现
Nov 05 PHP
微信开发之网页授权获取用户信息(二)
Jan 08 PHP
ThinkPHP中session函数详解
Sep 14 PHP
PHP合并数组的2种方法小结
Nov 24 PHP
PHP正则匹配日期和时间(时间戳转换)的实例代码
Dec 14 PHP
thinkPHP5.0框架API优化后的友好性分析
Mar 17 PHP
LAMP环境使用Composer安装Laravel的方法
Mar 25 PHP
详谈php中 strtr 和 str_replace 的效率问题
May 14 PHP
PHP实现从上往下打印二叉树的方法
Jan 18 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
php对二维数组进行排序的简单实例
2013/12/19 PHP
微信支付PHP SDK ―― 公众号支付代码详解
2016/09/13 PHP
PHP简单判断iPhone、iPad、Android及PC设备的方法
2016/10/11 PHP
Yii2结合Workerman的websocket示例详解
2018/09/10 PHP
django中的ajax组件教程详解
2018/10/18 PHP
PHP超级全局变量【$GLOBALS,$_SERVER,$_REQUEST等】用法实例分析
2019/12/11 PHP
关于__defineGetter__ 和__defineSetter__的说明
2007/05/12 Javascript
javascript同页面多次调用弹出层具体实例代码
2013/08/16 Javascript
JS函数this的用法实例分析
2015/02/05 Javascript
js实现点击按钮后给Div图层设置随机背景颜色的方法
2015/05/06 Javascript
jquery实现上传文件大小类型的验证例子(推荐)
2016/06/25 Javascript
更靠谱的H5横竖屏检测方法(js代码)
2016/09/13 Javascript
Angularjs实现带查找筛选功能的select下拉框示例代码
2016/10/04 Javascript
React/Redux应用使用Async/Await的方法
2017/11/16 Javascript
微信小程序实现打卡日历功能
2020/09/21 Javascript
vue eslint简要配置教程详解
2019/07/26 Javascript
详解Vue3中对VDOM的改进
2020/04/23 Javascript
vue3.0 加载json的方法(非ajax)
2020/10/26 Javascript
Flask 让jsonify返回的json串支持中文显示的方法
2018/03/26 Python
读取json格式为DataFrame(可转为.csv)的实例讲解
2018/06/05 Python
将tensorflow的ckpt模型存储为npy的实例
2018/07/09 Python
Python可变和不可变、类的私有属性实例分析
2019/05/31 Python
浅谈python 类方法/静态方法
2020/09/18 Python
纯CSS3制作漂亮带动画效果的主机价格表
2015/04/25 HTML / CSS
斯巴达比赛商店:Spartan Race
2019/01/08 全球购物
计算s=f(f(-1.4))的值
2014/05/06 面试题
行政内勤岗位职责
2014/04/07 职场文书
国际贸易专业自荐信
2014/06/10 职场文书
卫生院艾滋病宣传活动小结
2014/07/09 职场文书
党员教师四风问题整改措施思想汇报
2014/10/08 职场文书
工伤事故证明
2014/10/20 职场文书
2015暑假社会调查报告
2015/07/13 职场文书
学生病假条怎么写
2015/08/17 职场文书
CSS3 制作的图片滚动效果
2021/04/14 HTML / CSS
python必学知识之文件操作(建议收藏)
2021/05/30 Python
mysql5.5中文乱码问题解决的有用方法
2022/05/30 MySQL