http://www.dewen.net.cn/q/15749/PHP求数组值相加(可重复)等于某值的所有组合

tieGump
1 票
tieGump 8
例如 $data = array(1,2,4);$n=10;的所有的组合有Array ( [0] => 1,1,1,1,1,1,1,1,1,1 [1] => 2,1,1,1,1,1,1,1,1 [4] => 2,2,1,1,1,1,1,1 [5] => 4,1,1,1,1,1,1 [14] => 2,2,2,1,1,1,1 [15] => 4,2,1,1,1,1 [45] => 2,2,2,2,1,1 [46] => 4,2,2,1,1 [54] => 4,4,1,1 [141] => 2,2,2,2,2 [142] => 4,2,2,2 [150] => 4,4,2 )这些,我实现了一个算法。但是当$n比较大的时候运算特别慢,用二进制key相交的方式也试了。都比较慢,求一种更好的方式。谢谢,下面是我用递归实现的一种方式。求指导。

function myAll($n, $arr) {
foreach ($arr as $v) {
$tmp = $n - $v;
if ($tmp > 0) {
foreach (myAll($tmp, $arr) as $v1) {
$tt = is_array($v1) ? array_merge(array (
$v
), $v1) : array (
$v,
$v1
);
if (array_sum($tt) == $n) {
arsort($tt);
$return[] = $tt;
}
}
} else {
if ($n == $v)
$return[] = array (
$v
);
}
}
return $return;
}

$data = array(1,2,4);
$n=10;
$tmp=myAll($n, $data);
foreach($tmp as $value){
$t[]=implode($value,',');
}
$t2=array_unique($t);
$ii=array_intersect_key($tmp,$t2);
print_r($ii);

评论 (0) • 举报 (0) • 分享 • 链接 • 2013-12-13 
添加评论...
1个答案 票 数
brayden认证专家
1 票
brayden6562
最佳答案
这个就是完全背包问题的一个变种. 即要求正好达到背包容量. 物品的价值即是其重量.

打开 背包九讲, 第一讲: http://love-oriented.com/pack/P01.html

-- 引用
"如果是第一种问法,要求恰好装满背包,那么在初始化时除了f[0]为0其它f[1..V]均设为-∞,这样就可以保证最终得到的f[N]是一种恰好装满背包的最优解。

为什么呢?可以这样理解:初始化的f数组事实上就是在没有任何物品可以放入背包时的合法状态。如果要求背包恰好装满,那么此时只有容量为0的背包可能被价值为0的nothing“恰好装满”,其它容量的背包均没有合法的解,属于未定义的状态,它们的值就都应该是-∞了。如果背包并非必须被装满,那么任何容量的背包都有一个合法解“什么都不装”,这个解的价值为0,所以初始时状态的值也就全部为0了。

这个小技巧完全可以推广到其它类型的背包问题,后面也就不再对进行状态转移之前的初始化进行讲解。"
-- 引用结束

你的问题$data = array(1,2,4);$n=10, 即是背包容量为10. 物品v =[1,2,4], c=[1,2,4]的一个完全背包问题, 要求恰好装满背包.

转载于:https://www.cnblogs.com/brayden/p/5262129.html

http://www.dewen.net.cn/q/15749/PHP求数组值相加(可重复)等于某值的所有组合相关推荐

  1. http://www.dewen.net.cn/q/15807/java byte 疑问

    http://www.dewen.net.cn/q/15807/java byte 疑问 罢巴 1 票 罢巴 252 看的是 java7 入门经典,第58页有一个关于byte类型变量初始化的问题,希望 ...

  2. http://www.dewen.net.cn/q/9980/JQuery AJAX GBK 编

    http://www.dewen.net.cn/q/9980/JQuery AJAX GBK 编码 wpjsolo 1 票 wpjsolo 53 $.ajax({ type:"POST&qu ...

  3. http://www.dewen.net.cn/q/14879/搜索引擎结果自动跳转

    http://www.dewen.net.cn/q/14879/搜索引擎结果自动跳转 车头灯 2 票 车头灯 28 我是学生,维护学校的网站,广外地带,大家可以搜一下. 在搜索引擎,google和百度 ...

  4. http://www.dewen.net.cn/q/6120/如何获取Java对象的大小

    http://www.dewen.net.cn/q/6120/如何获取Java对象的大小 kenvi 1 票 kenvi 2078 在C或者C++里经常会通过sizeof来计算一个对象所占空间的大小, ...

  5. http://www.dewen.net.cn/q/16007/mysql查询如何先排序再分组呢

    http://www.dewen.net.cn/q/16007/mysql查询如何先排序再分组呢 kwooshung 2 票 kwooshung 11 比如数据表"article" ...

  6. http://www.dewen.net.cn/q/15051/C++ 整形和浮点数相除的精度问题

    http://www.dewen.net.cn/q/15051/C++ 整形和浮点数相除的精度问题 王老五 2 票 王老五 13 将一个单浮点数精确到千分位的程序 //舍入计算 精确到千分位 void ...

  7. http://www.dewen.net.cn/q/15328/问个正则表达式 贪婪 和 不匹配某个字符串问题

    http://www.dewen.net.cn/q/15328/问个正则表达式 贪婪 和 不匹配某个字符串问题 ovalpo 1 票 ovalpo 8 举例说明,例如有行文本,想找出由 << ...

  8. http://www.dewen.net.cn/q/14665/个人感觉用二分法最完美的,需要操作系统支持随机读取指定一行的数据,貌似现在还不行,江湖救急呀...

    http://www.dewen.net.cn/q/14665/个人感觉用二分法最完美的,需要操作系统支持随机读取指定一行的数据,貌似现在还不行,江湖救急呀 评论 (0) • 举报 (0) • 分享 ...

  9. http://www.dewen.net.cn/q/13558/100阶乘

    http://www.dewen.net.cn/q/13558/100阶乘 追梦天涯 1 票 追梦天涯 19 100阶乘怎么算才不会溢出 评论 (0) • 举报 (0) • 分享 • 链接 • 201 ...

最新文章

  1. 【Flutter】Flutter 开发环境搭建 ( Android Studio 下 Flutter / Dart 插件安装 | Flutter SDK 安装 | 环境变量配置 | 开发环境检查 )
  2. c++runtime error单调栈
  3. zabbix 监控项自动发现过滤_通过Zabbix的自动发现(规则)自动创建监控项
  4. HttpClient中的各种请求
  5. android studio 导入第三方库的记录
  6. qt designer 插入图片_老同学春节祝福语图片
  7. [leetcode] 554. 砖墙
  8. Python3 多线程(连接池)操作MySQL插入数据
  9. 《完美软件》读书笔记10:有关测试的主要误区
  10. [神经网络]什么叫神经网络
  11. linux 下 ffmpeg 库怎么才可以调试
  12. USRP_X310_Device_Recovery手册
  13. 流利阅读12.28 Seriously, Prada, what were you thinking? Why the fashion industry keeps bumbling into rac
  14. Windows Mobile 6.1模拟器发布,欢迎下载!
  15. apache iotdb_清华数为工业互联网时序数据库Apache IoTDB亮相2019工业互联网峰会
  16. Data Binding 用户指南(Android)
  17. Keras学习| ImageDataGenerator的参数
  18. Rabbit的工作原理
  19. 数据预处理(纯干货,适合小白学习)
  20. anaconda 创建虚拟环境

热门文章

  1. 小区卖什么最吸引人?哪些在小区卖的好?
  2. 主键,唯一索引 聚集索引的关系
  3. 几个Sniffer(嗅探器)工具
  4. C#基本控件属性介绍全集
  5. 记一次亲身经历的高速三车追尾及处理全流程
  6. 杰理AC695X系列---us定时器(12)
  7. 与门的Python实现
  8. 大公司和小公司的生存法则
  9. 网易HR告诉你关于网易招聘的那些事(下篇)
  10. [转] 一篇好文 ---steve jobs (stay hungry, stay foolish)