如何求数组中和为sum的元素最少的一种方案?

brk1985 2010-11-21 03:28:14
比如数组{1,2,3,4,8,10}--------和为14的元素最少的方案是4,10,而不是1,3,10或2,4,8等。。。

用循环解决不了,有可能2个数相加,也有可能是3个数相加,或更多个数相加。。。

用递归似乎也没什么规律。。。。

希望大家提供点思路,能给出代码更好。。。
...全文
345 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
w251988889 2010-11-23
  • 打赏
  • 举报
回复
顶...0/1..背包问题
zhouthy734850796 2010-11-23
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 joanlynnlove 的回复:]

用循环能解决的,位图。
元素个数不能太多,int型的话32个元素以下吧。

如果sum不大的话,楼主可以看看背包问题。
[/Quote]
如果元素太多大于32的话,对于32位机,可以将32个元素分成几组,每一组都用01背包,然后比较各组选出来的组合,最终确定选元素个数最少的
zhouthy734850796 2010-11-23
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 litaoye 的回复:]

lz看看背包问题,01背包
[/Quote]
很明显是01背包问题。
acdbxzyw 2010-11-22
  • 打赏
  • 举报
回复
用循环能解决的,位图。
元素个数不能太多,int型的话32个元素以下吧。

如果sum不大的话,楼主可以看看背包问题。
jxjszh 2010-11-22
  • 打赏
  • 举报
回复
只知是背包问题
somebody 2010-11-22
  • 打赏
  • 举报
回复
1,首先直接从数组中找看是否存在直接相等的数,有就结果,没有下一步;
2,从数组中选出比这个定值小但接近的数,然后用哪个定值和减去所选数,差是0即出结果;不为0下一步
3,差去数组找找看是否存在;存在即结果,不存在,下一步;
4,重复2,3步直到结果。
jikeyuan1 2010-11-21
  • 打赏
  • 举报
回复
LZ可以穷举法 列出所有的可能的情况,并且对每种情况计数,最后比较大小就是啦 !!
Daneill 2010-11-21
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 litaoye 的回复:]
lz看看背包问题,01背包
[/Quote]
顶!正解
绿色夹克衫 2010-11-21
  • 打赏
  • 举报
回复
lz看看背包问题,01背包
jinwen0915 2010-11-21
  • 打赏
  • 举报
回复
动态规划

33,008

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧