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程序员面试 切忌急功近利(更需要注重以后的发展)
Sep 01 PHP
php的chr和ord函数实现字符加减乘除运算实现代码
Dec 05 PHP
php 生成短网址原理及代码
Jan 23 PHP
php 购物车完整实现代码
Jun 05 PHP
ThinkPHP单字母函数(快捷方法)使用总结
Jul 23 PHP
PHP 实现类似js中alert() 提示框
Mar 18 PHP
PHP基于单例模式编写PDO类的方法
Sep 13 PHP
PHP标准类(stdclass)用法示例
Sep 28 PHP
PHP实现递归目录的5种方法
Oct 27 PHP
php常用字符串String函数实例总结【转换,替换,计算,截取,加密】
Dec 07 PHP
禁止直接访问php文件代码分享
May 05 PHP
PHP快速导出百万级数据到CSV或者EXCEL文件
Nov 27 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新手上路(二)
2006/10/09 PHP
PHP 编程请选择正确的文本编辑软件
2006/12/21 PHP
PHP获取数组最后一个值的2种方法
2015/01/21 PHP
thinkphp微信开之安全模式消息加密解密不成功的解决办法
2015/12/02 PHP
学习php设计模式 php实现建造者模式
2015/12/07 PHP
phpwind放自动注册方法
2006/12/02 Javascript
IE JS无提示关闭窗口不提示的方法
2010/04/29 Javascript
来自国外的14个图片放大编辑的jQuery插件整理
2010/10/20 Javascript
jQuery中读取json文件示例代码
2013/05/10 Javascript
浅谈jQuery页面的滚动位置scrollTop、scrollLeft
2015/05/19 Javascript
jQuery实现滑动页面固定顶部显示(可根据显示位置消失与替换)
2015/10/28 Javascript
jquery中的常见问题及快速解决方法小结
2016/06/14 Javascript
jQuery layui常用方法介绍
2016/07/25 Javascript
Angularjs的ng-repeat中去除重复数据的方法
2016/08/05 Javascript
IOS中safari下的select下拉菜单文字过长不换行的解决方法
2016/09/26 Javascript
详解Angular2中Input和Output用法及示例
2017/05/21 Javascript
Vue.js如何实现路由懒加载浅析
2017/08/14 Javascript
详解在Vue中有条件地使用CSS类
2017/09/30 Javascript
如何抽象一个Vue公共组件
2017/10/17 Javascript
vue-router启用history模式下的开发及非根目录部署方法
2018/12/23 Javascript
JS实现checkbox互斥(单选)功能示例
2019/05/04 Javascript
vue 解决form表单提交但不跳转页面的问题
2019/10/30 Javascript
js简单实现自动生成表格功能示例
2020/06/02 Javascript
VsCode里的Vue模板的实现
2020/08/12 Javascript
vue 接口请求地址前缀本地开发和线上开发设置方式
2020/08/13 Javascript
网站渗透常用Python小脚本查询同ip网站
2017/05/08 Python
Python从零开始创建区块链
2018/03/06 Python
使用Python实现将list中的每一项的首字母大写
2019/06/11 Python
Python 实现交换矩阵的行示例
2019/06/26 Python
详解修改Anaconda中的Jupyter Notebook默认工作路径的三种方式
2021/01/24 Python
Python中lru_cache的使用和实现详解
2021/01/25 Python
应届生服务员求职信
2013/10/31 职场文书
小学教育毕业生自荐信
2013/11/18 职场文书
大学毕业感言
2014/01/10 职场文书
简单租房协议书(范本)
2014/10/13 职场文书
入党积极分子党支部意见
2015/06/02 职场文书