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 相关文章推荐
经典的PHPer为什么被认为是草根?
Apr 02 PHP
php session处理的定制
Mar 16 PHP
php Smarty date_format [格式化时间日期]
Mar 15 PHP
简单分析ucenter 会员同步登录通信原理
Aug 25 PHP
PHP+JQuery+Ajax实现分页方法详解
Aug 06 PHP
ThinkPHP3.2.1图片验证码实现方法
Aug 19 PHP
微信公众号开发客服接口实例代码
Oct 21 PHP
Yii2实现跨mysql数据库关联查询排序功能代码
Feb 10 PHP
PHP使用PHPExcel实现批量上传到数据库的方法
Jun 08 PHP
简单实现php上传文件功能
Sep 21 PHP
PHP使用gearman进行异步的邮件或短信发送操作详解
Feb 27 PHP
php 下 html5 XHR2 + FormData + File API 上传文件操作实例分析
Feb 28 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之PHP语法学习笔记1
2006/12/17 PHP
解析二进制流接口应用实例 pack、unpack、ord 函数使用方法
2013/06/18 PHP
php中mail函数发送邮件失败的解决方法
2014/12/24 PHP
php读取mssql的ntext字段返回值为空的解决方法
2014/12/30 PHP
php使用正则表达式获取图片url的方法
2015/01/16 PHP
分享3个php获取日历的函数
2015/09/25 PHP
驱动事件的addEvent.js代码
2007/03/27 Javascript
input 高级限制级用法
2009/03/26 Javascript
动态创建script标签实现跨域资源访问的方法介绍
2014/02/28 Javascript
原生javascript实现获取指定元素下所有后代元素的方法
2014/10/28 Javascript
js获取域名的方法
2015/01/27 Javascript
JavaScript实现经纬度转换成地址功能
2017/03/28 Javascript
关于Webpack dev server热加载失败的解决方法
2018/02/22 Javascript
vue+element-ui集成随机验证码+用户名+密码的form表单验证功能
2018/08/05 Javascript
Vue-axios-post数据后端接不到问题解决
2020/01/09 Javascript
解决vuex刷新数据消失问题
2020/11/12 Javascript
[01:35]2018年度CS GO最佳战队-完美盛典
2018/12/17 DOTA
python在控制台输出进度条的方法
2015/06/20 Python
python3.6+opencv3.4实现鼠标交互查看图片像素
2018/02/26 Python
如何利用Pyecharts可视化微信好友
2019/07/04 Python
python实现H2O中的随机森林算法介绍及其项目实战
2019/08/29 Python
django中的图片验证码功能
2019/09/18 Python
Django框架下静态模板的继承操作示例
2019/11/08 Python
python将图片转base64,实现前端显示
2020/01/09 Python
意大利综合购物网站:Giordano Shop
2016/10/21 全球购物
Skyscanner加拿大:全球旅行搜索平台
2018/11/19 全球购物
体育专业个人的求职信范文
2013/09/21 职场文书
理货员的岗位职责
2013/11/23 职场文书
情况说明书格式范文
2014/05/06 职场文书
建筑工程造价专业自荐信
2014/07/08 职场文书
解除劳动关系协议书范文
2014/09/11 职场文书
慰问信模板
2015/02/14 职场文书
幼儿园开学家长寄语(2015秋季)
2015/05/27 职场文书
教师工作证明范本
2015/06/12 职场文书
2019消防宣传标语!
2019/07/10 职场文书
JVM入门之类加载与字节码技术(类加载与类的加载器)
2021/06/15 Java/Android