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 启动时报错的简单解决方法
Jan 27 PHP
php中常量DIRECTORY_SEPARATOR用法深入分析
Nov 14 PHP
php在线解压ZIP文件的方法
Dec 30 PHP
PHP SPL标准库中的常用函数介绍
May 11 PHP
如何批量清理系统临时文件(语言:C#、 C/C++、 php 、python 、java )
Feb 01 PHP
CodeIgniter基于Email类发邮件的方法
Mar 29 PHP
thinkphp项目部署到Linux服务器上报错“模板不存在”如何解决
Apr 27 PHP
php实现文件上传及头像预览功能
Jan 15 PHP
PHP面向对象中new self()与 new static()的区别浅析
Aug 17 PHP
PHP addAttribute()函数讲解
Feb 03 PHP
Yii框架参数配置文件params用法实例分析
Sep 11 PHP
解决PHP使用CURL发送GET请求时传递参数的问题
Oct 11 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
建立文件交换功能的脚本(一)
2006/10/09 PHP
php获取指定范围内最接近数的方法
2015/06/02 PHP
php curl常用的5个经典例子
2017/01/20 PHP
cnblogs csdn 代码运行框实现代码
2009/11/02 Javascript
JavaScript实现简单的时钟实例代码
2013/11/23 Javascript
常用的jquery模板插件——jQuery Boilerplate介绍
2014/09/23 Javascript
JavaScript实现SHA-1加密算法的方法
2015/03/11 Javascript
jQuery定义背景动态切换效果的方法
2015/03/23 Javascript
JavaScript的jQuery库中ready方法的学习教程
2015/08/14 Javascript
浅谈Nodejs观察者模式
2015/10/13 NodeJs
浅谈angular4.0中路由传递参数、获取参数最nice的写法
2018/03/12 Javascript
vue实现2048小游戏功能思路详解
2018/05/09 Javascript
Vue中div contenteditable 的光标定位方法
2018/08/25 Javascript
详解Vue Elementui中的Tag与页面其它元素相互交互的两三事
2018/09/25 Javascript
JavaScript查看代码运行效率console.time()与console.timeEnd()用法
2019/01/18 Javascript
[01:14]3.19DOTA2发布会 三代刀塔人第二代
2014/03/25 DOTA
[04:28]DOTA2亚洲邀请赛小组赛第五日 TOP10精彩集锦
2015/02/03 DOTA
[41:12]Liquid vs Secret 2019国际邀请赛淘汰赛 败者组 BO3 第一场 8.24
2019/09/10 DOTA
pandas数值计算与排序方法
2018/04/12 Python
Python中按键来获取指定的值
2019/03/02 Python
python2.7实现复制大量文件及文件夹资料
2019/08/31 Python
python3实现elasticsearch批量更新数据
2019/12/03 Python
Python Selenium参数配置方法解析
2020/01/19 Python
Python利用 utf-8-sig 编码格式解决写入 csv 文件乱码问题
2020/02/21 Python
Python实现Word表格转成Excel表格的示例代码
2020/04/16 Python
Python如何将字符串转换为日期
2020/07/31 Python
Python中BeautifulSoup通过查找Id获取元素信息
2020/12/07 Python
Python基础进阶之海量表情包多线程爬虫功能的实现
2020/12/17 Python
python 进制转换 int、bin、oct、hex的原理
2021/01/13 Python
关于PySnooper 永远不要使用print进行调试的问题
2021/03/04 Python
Paper Cape官网:美国婴儿和儿童服装品牌
2019/11/02 全球购物
《匆匆》教学反思
2014/02/22 职场文书
市场营销工作计划书
2014/09/15 职场文书
社区活动总结
2015/02/04 职场文书
男人帮观后感
2015/06/18 职场文书
求职自荐信该如何书写?
2019/06/24 职场文书