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调用Oracle存储过程的方法
Sep 12 PHP
使用eAccelerator加密PHP程序
Oct 03 PHP
一道求$b相对于$a的相对路径的php代码
Aug 08 PHP
深入file_get_contents函数抓取内容失败的原因分析
Jun 25 PHP
九个你必须知道而且又很好用的php函数和特点
Aug 08 PHP
获取URL文件名后缀
Oct 24 PHP
php简单判断文本编码的方法
Jul 30 PHP
PHP微信红包API接口
Dec 05 PHP
php实现微信公众号主动推送消息
Dec 31 PHP
php框架CodeIgniter主从数据库配置方法分析
May 25 PHP
Laravel中9个不经常用的小技巧汇总
Apr 16 PHP
使用Laravel中的查询构造器实现增删改查功能
Sep 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
PHP提取中文首字母
2008/04/09 PHP
JavaScript constructor和instanceof,JSOO中的一对欢喜冤家
2009/05/25 Javascript
JavaScript中用toString()方法返回时间为字符串
2015/06/12 Javascript
全面解析Bootstrap中scrollspy(滚动监听)的使用方法
2016/06/06 Javascript
基于MVC5和Bootstrap的jQuery TreeView树形控件(一)之数据支持json字符串、list集合
2016/08/11 Javascript
AngularJS入门教程之MVC架构实例分析
2016/11/01 Javascript
JavaScript中return用法示例
2016/11/29 Javascript
浅谈JavaScript中的apply/call/bind和this的使用
2017/02/26 Javascript
vue.js中指令Directives详解
2017/03/20 Javascript
微信小程序点击控件修改样式实例详解
2017/07/07 Javascript
vue-cli单页应用改成多页应用配置详解
2017/07/14 Javascript
vue项目引入字体.ttf的方法
2018/09/28 Javascript
如何手动实现es5中的bind方法详解
2018/12/07 Javascript
使用Vue开发自己的Chrome扩展程序过程详解
2019/06/21 Javascript
小程序实现日历左右滑动效果
2019/10/21 Javascript
详解react组件通讯方式(多种)
2020/05/06 Javascript
JSON获取属性值方法代码实例
2020/06/30 Javascript
[01:53]DOTA2超级联赛专访Zhou 五年职业青春成长
2013/05/29 DOTA
详解Python中的文本处理
2015/04/11 Python
python实现向ppt文件里插入新幻灯片页面的方法
2015/04/28 Python
Python拼接微信好友头像大图的实现方法
2018/08/01 Python
Python线程同步的实现代码
2018/10/03 Python
pyqt5 从本地选择图片 并显示在label上的实例
2019/06/13 Python
django echarts饼图数据动态加载的实例
2019/08/12 Python
Python 内置变量和函数的查看及说明介绍
2019/12/25 Python
DjangoWeb使用Datatable进行后端分页的实现
2020/05/18 Python
Vans澳大利亚官网:购买鞋子、服装及配件
2019/09/05 全球购物
什么是继承
2013/12/07 面试题
外贸销售员求职的自我评价
2013/11/23 职场文书
物流仓储计划书
2014/01/10 职场文书
学生会感恩节活动方案
2014/10/11 职场文书
维稳工作情况汇报
2014/10/27 职场文书
2015年考研复习计划
2015/01/19 职场文书
加薪通知
2015/04/25 职场文书
学校勤俭节约倡议书
2015/04/29 职场文书
k-means & DBSCAN 总结
2021/04/27 Python