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 选项及相关信息函数库
Dec 04 PHP
PHP下操作Linux消息队列完成进程间通信的方法
Jul 24 PHP
php切割页面div内容的实现代码分享
Jul 31 PHP
PHP服务器页面间跳转实现方法
Aug 02 PHP
PHP手机号码归属地查询代码(API接口/mysql)
Sep 04 PHP
PHP的变量类型和作用域详解
Mar 12 PHP
PHP中使用gettext解决国际化问题的例子(i18n)
Jun 13 PHP
PHP变量赋值、代入给JavaScript中的变量
Jun 29 PHP
PHP身份证校验码计算方法
Aug 10 PHP
PHP 中使用ajax时一些常见错误总结整理
Feb 27 PHP
PHP实现在windows下配置sendmail并通过mail()函数发送邮件的方法
Jun 20 PHP
如何在centos8自定义目录安装php7.3
Nov 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
从康盛产品(discuz)提取出来的模板类
2011/06/28 PHP
php获取数组长度的方法(有实例)
2013/10/27 PHP
异步加载技术实现当滚动条到最底部的瀑布流效果
2014/09/16 PHP
基于php实现七牛抓取远程图片
2015/12/01 PHP
javascript 词法作用域和闭包分析说明
2010/08/12 Javascript
js不能跳转到上一页面的问题解决方法
2013/03/01 Javascript
浅析jQuery(function(){})与(function(){})(jQuery)之间的区别
2014/01/09 Javascript
Javascript中设置默认参数值示例
2014/09/11 Javascript
javascript使用switch case实现动态改变超级链接文字及地址
2014/12/16 Javascript
深入理解JavaScript系列(36):设计模式之中介者模式详解
2015/03/04 Javascript
JavaScript数组对象赋值用法实例
2015/08/04 Javascript
ionic js 复选框 与普通的 HTML 复选框到底有没区别
2016/06/06 Javascript
微信小程序 Storage API实例详解
2016/10/02 Javascript
JS小数转换为整数的方法分析
2017/01/07 Javascript
原生js轮播(仿慕课网)
2017/02/15 Javascript
vue2手机APP项目添加开屏广告或者闪屏广告
2017/11/28 Javascript
微信小程序实现折叠面板
2018/01/31 Javascript
vue实现在表格里,取每行的id的方法
2018/03/09 Javascript
如何在vue里添加好看的lottie动画
2018/08/02 Javascript
Python正则表达式匹配HTML页面编码
2015/04/08 Python
简单实现python画圆功能
2018/01/25 Python
scrapy-redis的安装部署步骤讲解
2019/02/27 Python
PyTorch基本数据类型(一)
2019/05/22 Python
Python限制内存和CPU使用量的方法(Unix系统适用)
2020/08/04 Python
python logging模块的使用
2020/09/07 Python
Python爬虫进阶之爬取某视频并下载的实现
2020/12/08 Python
python画图时设置分辨率和画布大小的实现(plt.figure())
2021/01/08 Python
一款利用纯css3实现的360度翻转按钮的实例教程
2014/11/05 HTML / CSS
HTML5 用动画的表现形式装载图像
2016/03/08 HTML / CSS
美国孕妇装购物网站:Motherhood Maternity
2019/09/22 全球购物
十八大感想感言
2014/02/10 职场文书
广告设计应届生求职信
2014/03/01 职场文书
竞聘书模板
2014/03/31 职场文书
销售简历自我评价怎么写
2014/09/26 职场文书
会计简历自我评价
2015/03/10 职场文书
Python如何配置环境变量详解
2021/05/18 Python