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
PHP 无限分类三种方式 非函数的递归调用!
Aug 26 PHP
simplehtmldom Doc api帮助文档
Mar 26 PHP
深入理解require与require_once与include以及include_once的区别
Jun 05 PHP
解析php中heredoc的使用方法
Jun 17 PHP
有关于PHP中常见数据类型的汇总分享
Jan 06 PHP
php表单请求获得数据求和示例
May 15 PHP
PHP定时更新程序设计思路分享
Jun 10 PHP
PHP面试常用算法(推荐)
Jul 22 PHP
Yii框架中用response保存cookie,用request读取cookie的原理解析
Sep 04 PHP
php 命名空间(namespace)原理与用法实例小结
Nov 13 PHP
如何在Laravel之外使用illuminate组件详解
Sep 20 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
Extended CHM PHP 语法手册之 DIY
2006/10/09 PHP
PHP __autoload()方法真的影响性能吗?
2012/03/30 PHP
PHP获取远程图片并保存到本地的方法
2015/05/12 PHP
深入理解PHP中的Streams工具
2015/07/03 PHP
PHP+HTML+JavaScript+Css实现简单爬虫开发
2016/03/28 PHP
PHP的PDO操作简单示例
2016/03/30 PHP
PHP实现动态删除XML数据的方法示例
2018/03/30 PHP
PHP观察者模式实例分析【对比JS观察者模式】
2019/05/22 PHP
完美兼容各大浏览器的jQuery插件实现图片切换特效
2014/12/12 Javascript
JavaScript常用脚本汇总(三)
2015/03/04 Javascript
JavaScript中的substr()方法使用详解
2015/06/06 Javascript
深入理解jQuery3.0的domManip函数
2016/09/01 Javascript
微信小程序 用户数据解密详细介绍
2017/01/09 Javascript
基于JavaScript实现拖动滑块效果
2017/02/16 Javascript
JavaScript 获取元素在父节点中的下标(推荐)
2017/06/28 Javascript
浅谈vue-lazyload实现的详细过程
2017/08/22 Javascript
Vue2.0 slot分发内容与props验证的方法
2017/12/12 Javascript
使用layui前端框架弹出form表单以及提交的示例
2019/10/25 Javascript
Vue+ElementUI 中级联选择器Bug问题的解决
2020/07/31 Javascript
vue-cli3项目打包后自动化部署到服务器的方法
2020/09/16 Javascript
[01:45]DOTA2众星出演!DSPL刀塔次级职业联赛宣传片
2014/11/21 DOTA
Python中正则表达式的用法实例汇总
2014/08/18 Python
举例讲解Python中的list列表数据结构用法
2016/03/12 Python
python 生成器协程运算实例
2017/09/04 Python
Python3.5基础之函数的定义与使用实例详解【参数、作用域、递归、重载等】
2019/04/26 Python
详解Python3中setuptools、Pip安装教程
2019/06/18 Python
Python中Subprocess的不同函数解析
2019/12/10 Python
tensorflow生成多个tfrecord文件实例
2020/02/17 Python
AVON雅芳官网:世界上最大的美容化妆品公司之一
2016/11/02 全球购物
美国照明、家居装饰和家具购物网站:Bellacor
2017/09/20 全球购物
四年级评语大全
2014/04/21 职场文书
文秘专业应届生求职信
2014/05/26 职场文书
住宿生擅自离校检讨书
2014/09/22 职场文书
详解thinkphp的Auth类认证
2021/05/28 PHP
解决Navicat for MySQL 连接 MySQL 报2005错误的问题
2021/05/29 MySQL
Python+tkinter实现高清图片保存
2022/03/13 Python