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的FTP学习(一)[转自奥索]
Oct 09 PHP
连接到txt文本的超链接,不直接打开而是点击后下载的处理方法
Jul 01 PHP
PHP 防恶意刷新实现代码
May 16 PHP
基于PHP array数组的教程详解
Jun 05 PHP
hadoop常见错误以及处理方法详解
Jun 19 PHP
调整PHP的性能
Oct 30 PHP
wordpress自定义url参数实现路由功能的代码示例
Nov 28 PHP
thinkphp实现like模糊查询实例
Oct 29 PHP
php程序内部post数据的方法
Mar 31 PHP
PHP连接Nginx服务器并解析Nginx日志的方法
Aug 16 PHP
PHP之图片上传类实例代码(加了缩略图)
Jun 30 PHP
laravel 实现划分admin和home 模块分组
Oct 15 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做推送服务端实现ios消息推送
2013/07/01 PHP
mysql_connect localhost和127.0.0.1的区别(网络层阐述)
2015/03/26 PHP
PHP共享内存用法实例分析
2016/02/12 PHP
Codeigniter中集成smarty和adodb的方法
2016/03/04 PHP
JSON字符串传到后台PHP处理问题的解决方法
2016/06/05 PHP
js 图片轮播(5张图片)
2008/12/30 Javascript
JavaScript 滚轮事件使用说明
2010/03/07 Javascript
基于Jquery与WebMethod投票功能实现代码
2011/01/19 Javascript
情人节专属 纯js脚本1k大小的3D玫瑰效果
2012/02/11 Javascript
jQuery之按钮组件的深入解析
2013/06/19 Javascript
jQuery实现文件上传进度条特效
2015/08/12 Javascript
微信小程序 开发指南详解
2016/09/27 Javascript
Vue2学习笔记之请求数据交互vue-resource
2017/02/23 Javascript
原生js实现选项卡功能
2017/03/08 Javascript
bootstrap3 dialog 更强大、更灵活的模态框
2017/04/20 Javascript
详解Vue.js组件可复用性的混合(mixin)方式和自定义指令
2017/09/06 Javascript
js判断传入时间和当前时间大小实例(超简单)
2018/01/11 Javascript
javascript实现视频弹幕效果(两个版本)
2019/11/28 Javascript
部署vue+Springboot前后端分离项目的步骤实现
2020/05/31 Javascript
[02:03]《现实生活中的DOTA2》—林书豪&DOTA2职业选手出演短片
2015/08/18 DOTA
python封装对象实现时间效果
2020/04/23 Python
Python获取邮件地址的方法
2015/07/10 Python
Linux CentOS7下安装python3 的方法
2018/01/21 Python
使用 Python 实现文件递归遍历的三种方式
2018/07/18 Python
Python文件读写保存操作的示例代码
2018/09/14 Python
Python搭建代理IP池实现获取IP的方法
2019/10/27 Python
Python实现数值积分方式
2019/11/20 Python
Python 私有化操作实例分析
2019/11/21 Python
python 爬取英雄联盟皮肤并下载的示例
2020/12/04 Python
Python爬虫回测股票的实例讲解
2021/01/22 Python
使用HTML和CSS实现的标签云效果(附demo)
2021/02/03 HTML / CSS
大学生自我鉴定范文
2013/12/28 职场文书
收银员的岗位职责范本
2014/02/04 职场文书
委托书的样本
2015/01/28 职场文书
骆驼祥子读书笔记
2015/06/26 职场文书
Oracle数据库中通用的函数实例详解
2022/03/25 Oracle