社区
数据结构与算法
帖子详情
数据组合问题
上官云峰
2009-07-14 09:54:25
有一组数据
2 4.04
3 1.5
4 4.12
5 1.5
6 2.64
7 3.31
8 4.8
9 9.6
10 9.6
假如我给个合计值是19.2 那么应该是9和10的合计;如果合计值是24 那么应该是8、9、10的合计
这个算法怎么写[我确定拆分出来的一定是一组数据]
...全文
58
19
打赏
收藏
数据组合问题
有一组数据 24.04 31.5 44.12 51.5 62.64 73.31 84.8 99.6 109.6 假如我给个合计值是19.2 那么应该是9和10的合计;如果合计值是24 那么应该是8、9、10的合计 这个算法怎么写[我确定拆分出来的一定是一组数据]
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
19 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
绿色夹克衫
2009-07-16
打赏
举报
回复
确实是背包问题,而且是01背包,最近讨论的很多,LZ看看这个帖子吧
http://topic.csdn.net/u/20090511/23/a482be66-6598-46fa-be19-e7e356e2244b.html
(每次都推荐自己发言的帖子,都有点不好意思了,其实主要是因为好找,其实关于背包的帖子挺多的,LZ可以自己搜索一下)
firePhoenix1981
2009-07-15
打赏
举报
回复
递归实现:
#include "stdio.h"
int bag_loop(int A[], int M[], int total)
{
int i,j;
for(i=1;i<=A[0];i++)
{
if(1==M[i]){
continue;
}
M[i]=1;
if(total==A[i]){
printf("%4d\n", A[i]);
return 1;
}
if(total>A[i]){
if(0!=bag_loop(A, M, total-A[i])){
printf("%4d\n",A[i] );
return 1;
}
}
M[i]=0;
}
return 0;
}
int main(void)
{
int A[]={9, 404, 15, 412, 15, 264, 331, 48, 96, 96};
int M[]={0, 0 , 0, 0, 0, 0, 0, 0, 0, 0};
int i;
/*use the normal algorithm*/
bag_loop(A, M, 361);
for(i=1; i<=A[0]; i++)
{
printf("%4d", M[i]);
}
printf("\n");
return 0;
}
千与
2009-07-15
打赏
举报
回复
如果数据量很小,可以考虑先对数据(实型)从小到大进行排序,然后执行累加操作,得到实际需要的合计值(如果存在),返回条目编号序列;
如果数据量较大,可以考虑建立排序二叉树,通过遍历排序二叉树,累加合计总数,返回条目编号序列。
showjim
2009-07-15
打赏
举报
回复
[Quote=引用 13 楼 tanwan 的回复:]
背包小数如何做?
[/Quote]
小数和整数与思路无关吧,2位小数*100就化成整数问题了,难道题目里面有无限小数?
donkey301
2009-07-14
打赏
举报
回复
恩,的确是。石头的价值就可以认为正比于质量。
jlp999
2009-07-14
打赏
举报
回复
如果数据不多,直接做数据表格映射和值就好。
如:
4.04->2
5.54->2,3
9.66->2,3,4
5.62->3,4
……
fire_woods
2009-07-14
打赏
举报
回复
一组数就是对应的石头的质量,你要求的那个数就是背包最多能装的质量.
用背包问题求最优解,如果刚好装满,就是你要的解.
上官云峰
2009-07-14
打赏
举报
回复
怎么出来啊,给个方法啊
fire_woods
2009-07-14
打赏
举报
回复
不用连续是背包问题.
上官云峰
2009-07-14
打赏
举报
回复
不用连续,只要找出来就可以
上官云峰
2009-07-14
打赏
举报
回复
上面的数据是两列 前面的是ID,后面的是数值
2 4.04
3 1.5
4 4.12
5 1.5
6 2.64
7 3.31
8 4.8
9 9.6
10 9.6
hlwang_1984
2009-07-14
打赏
举报
回复
思考中。。。
fire_woods
2009-07-14
打赏
举报
回复
需要连续否?
比如2,4可以吗?
ltmit
2009-07-14
打赏
举报
回复
顶7楼。
tanwan
2009-07-14
打赏
举报
回复
背包小数如何做?
firePhoenix1981
2009-07-14
打赏
举报
回复
嗯,背包问题从思想上来说应该可以
我开始太呆板了
fire_woods
2009-07-14
打赏
举报
回复
google 背包问题.
firePhoenix1981
2009-07-14
打赏
举报
回复
先对数据从大到小排序,然后小于(等于)待合计的数据开始出递归就可以解出来,不过复杂度可能大了些
背包的话,如何弄?可否详细说下
数据
结构+算法综合资料库
数据
结构与算法综合资料库(CHM) 程序员必备的基础资料,对
数据
结构与算法很详细的讲解,里面还有许多示例,大家可以参考,学习编程语言都要用到的基础资料。初级走向高级必修的内功心法!
java算法大全(含源码包)
java算法大全,有近100多种常见算法的源代码,是学习JAVA算法的难得资料。
Tianlesoftware Oracle 学习手册(v1.0)高清完整PDF版
Tianlesoftware Oracle 学习手册(v1.0)
ACM超级经典算法大集合
ACM超级经典算法大集合。大家都知道acm大赛对计算机专业的大学生说是很有用的
十三个经典算法研究PDF文档[带目录+标签]
本文件是十三个经典算法研究+红黑树系列的,带目录+标签的PDF文档。在此之前,网上绝无仅有。希望,对你有帮助。博客地址为:http://blog.csdn.net/v_JULY_v。
数据结构与算法
33,028
社区成员
35,337
社区内容
发帖
与我相关
我的任务
数据结构与算法
数据结构与算法相关内容讨论专区
复制链接
扫一扫
分享
社区描述
数据结构与算法相关内容讨论专区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章