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 相关文章推荐
超级简单的发送邮件程序
Oct 09 PHP
微信支付开发教程(一)微信支付URL配置
May 28 PHP
php中最简单的字符串匹配算法
Dec 16 PHP
PHP_SELF,SCRIPT_NAME,REQUEST_URI区别
Dec 24 PHP
Yii中使用PHPExcel导出Excel的方法
Dec 26 PHP
Mac OS下配置PHP+MySql环境
Feb 25 PHP
PHP使用mysql_fetch_object从查询结果中获取对象集的方法
Mar 18 PHP
Discuz!X中SESSION机制实例详解
Sep 23 PHP
php ajax实现文件上传进度条
Mar 29 PHP
[原创]php简单防盗链验证实现方法
Jul 09 PHP
PHP实现支持CURL字符串证书传输的方法
Mar 23 PHP
ThinkPHP5.0框架结合Swoole开发实现WebSocket在线聊天案例详解
Apr 02 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中实现Javascript的escape()函数代码
2010/08/08 PHP
PHP5中GD库生成图形验证码(有汉字)
2013/07/28 PHP
Yii2实现跨mysql数据库关联查询排序功能代码
2017/02/10 PHP
ajax调用返回php接口返回json数据的方法(必看篇)
2017/05/05 PHP
关于ThinkPhp 框架表单验证及ajax验证问题
2017/07/19 PHP
Jquery Autocomplete 结合asp.net使用要点
2010/10/29 Javascript
玩转jQuery按钮 请告诉我你最喜欢哪些?
2012/01/08 Javascript
浅谈js的setInterval事件
2014/12/05 Javascript
node.js中的http.request方法使用说明
2014/12/14 Javascript
JavaScript限定图片显示大小的方法
2015/03/11 Javascript
javascript操作ul中li的方法
2015/05/14 Javascript
JS实现不使用图片仿Windows右键菜单效果代码
2015/10/22 Javascript
Javascript简单实现面向对象编程继承实例代码
2015/11/27 Javascript
Bootstrap输入框组件使用详解
2017/06/09 Javascript
Nodejs中使用phantom将html转为pdf或图片格式的方法
2017/09/18 NodeJs
JavaScript引用类型Function实例详解
2018/08/09 Javascript
vue根据值给予不同class的实例
2018/09/29 Javascript
React降级配置及Ant Design配置详解
2018/12/27 Javascript
Vue中对iframe实现keep alive无刷新的方法
2019/07/23 Javascript
vue项目中使用particles实现粒子背景效果及遇到的坑(按钮没有点击响应)
2020/02/11 Javascript
extjs图表绘制之条形图实现方法分析
2020/03/06 Javascript
给Python入门者的一些编程建议
2015/06/15 Python
python去掉行尾的换行符方法
2017/01/04 Python
Python正则表达式教程之三:贪婪/非贪婪特性
2017/03/02 Python
Python实现简单过滤文本段的方法
2017/05/24 Python
Python使用Windows API创建窗口示例【基于win32gui模块】
2018/05/09 Python
python实现微信定时每天和女友发送消息
2019/04/29 Python
Python气泡提示与标签的实现
2020/04/01 Python
python安装cx_Oracle和wxPython的方法
2020/09/14 Python
基本款天堂:Everlane
2017/05/13 全球购物
大三学生做职业规划:给未来找个方向
2014/02/24 职场文书
应聘文员自荐信范文
2014/03/11 职场文书
公证委托书大全
2014/04/04 职场文书
创先争优标语
2014/06/27 职场文书
公司行政助理岗位职责
2015/04/11 职场文书
药房管理制度范本
2015/08/06 职场文书