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 相关文章推荐
vBulletin HACK----显示话题大小和打开新窗口于论坛索引页
Oct 09 PHP
PHP 输出缓存详解
Jun 20 PHP
抓取并下载CSS中所有图片文件的php代码
Sep 26 PHP
PHP中使用imagick实现把PDF转成图片
Jan 26 PHP
PHP 实现代码复用的一个方法 traits新特性
Feb 22 PHP
PHP 数据结构队列(SplQueue)和优先队列(SplPriorityQueue)简单使用实例
May 12 PHP
PHP环境搭建(php+Apache+mysql)
Nov 14 PHP
Win10 下安装配置IIS + MySQL + nginx + php7.1.7
Aug 04 PHP
safari下载文件自动加了html后缀问题
Nov 09 PHP
PHP实现数组向任意位置插入,删除,替换数据操作示例
Apr 05 PHP
Laravel5.5 视图 - 创建视图和数据传递示例
Oct 21 PHP
php ActiveMQ的安装与使用方法图文教程
Feb 23 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取整数函数常用的四种方法小结
2012/07/05 PHP
Yii把CGridView文本框换成下拉框的方法
2014/12/03 PHP
Yii实现单用户博客系统文章详情页插入评论表单的方法
2015/12/28 PHP
CentOS 上搭建 PHP7 开发测试环境
2017/02/26 PHP
ThinkPHP中调用PHPExcel的实现代码
2017/04/08 PHP
jQuery在vs2008及js文件中的无智能提示的解决方法
2010/12/30 Javascript
javascript之typeof、instanceof操作符使用探讨
2013/05/19 Javascript
jQuery表单获取和失去焦点输入框提示效果的实例代码
2013/08/01 Javascript
使用js修改客户端注册表的方法
2013/08/09 Javascript
jquery实现左右滑动菜单效果代码
2015/08/27 Javascript
JavaScript常用标签和方法总结
2015/09/01 Javascript
jquery UI Datepicker时间控件的使用方法(加强版)
2015/11/07 Javascript
javascript类型系统 Array对象学习笔记
2016/01/09 Javascript
Angularjs实现分页和分页算法的示例代码
2016/12/23 Javascript
浅谈js for循环输出i为同一值的问题
2017/03/01 Javascript
Js自定义多选框效果的实例代码
2017/07/05 Javascript
Vue-router结合transition实现app前进后退动画切换效果的实例
2017/10/11 Javascript
详解Vue单元测试Karma+Mocha学习笔记
2018/01/31 Javascript
Vue.js做select下拉列表的实例(ul-li标签仿select标签)
2018/03/02 Javascript
JQuery选中select组件被选中的值方法
2018/03/08 jQuery
详解处理bootstrap4不支持远程静态框问题
2018/07/20 Javascript
vue中rem的配置的方法示例
2018/08/30 Javascript
WebSocket的简单介绍及应用
2019/05/23 Javascript
[04:11]DOTA2上海特级锦标赛主赛事首日TOP10
2016/03/03 DOTA
python发送邮件脚本
2018/05/22 Python
Python3.5以上版本lxml导入etree报错的解决方案
2019/06/26 Python
Django 实现Admin自动填充当前用户的示例代码
2019/11/18 Python
简单了解Python变量作用域正确使用方法
2020/06/12 Python
vscode配置anaconda3的方法步骤
2020/08/08 Python
Python实现FTP文件定时自动下载的步骤
2020/12/19 Python
南非最受欢迎的时尚品牌:MRP
2016/09/18 全球购物
里程积分管理买卖交换平台:Points.com
2017/01/13 全球购物
先进个人材料怎么写
2014/12/30 职场文书
2015年酒店服务员工作总结
2015/05/18 职场文书
欢送领导祝酒词
2015/08/12 职场文书
Pytorch 如何实现LSTM时间序列预测
2021/05/17 Python