排列组合算法,要求从一堆数中任取m个数组合使得m个数的和最接近某个数

比如某个数组有元素如下 :
元素133有2个,121有4个,108 有2个,58有14个 ,115有6个

要求从中取任意个数使得他们的和最接近600,所有元素要求全部组合完。
比如:121取4个加上108取1个

组合1:121*4+108*1=592 ---121 取完了,108还剩1个
组合2:133*1+115*3+58*2=594--
组合3:133*1+115*3+58*2=594--133取完了,115 取完了,58还剩10 个
组合4:58*10=580 --全部取完

要求:(600- 组合1的和)+(600- 组合2的和)+
(600- 组合3的和)+(600- 组合4的和)在所有的组合方案中
值最小为最优方案

典型的组合问题,解法有递归、回溯等等递归法较简单,代码如下: void combine(int a[], int n, int m, int b[], int M); 参数:a 存放候选数字n 总项数m 取出项数b 存放选出结果M = m

#include "stdio.h"#define MAX 100 void combine(int a[], int n, int m, int b[], int M); int main(void){ int i; int a[MAX], b[MAX]; for (i = 1; i < 100; i++) a[i - 1] = i; combine(a, 5, 4, b, 4);} void combine(int a[], int n, int m, int b[], int M){ int i, j; for (i = n; i >= m; i--) { b[m - 1] = i - 1; if (m > 1) combine(a, i - 1, m - 1, b, M); else { for (j = M - 1; j >= 0; j--) printf("%d ", a[b[j]]); printf("\n"); } }}

其他方法可查阅相关资料。
温馨提示:内容为网友见解,仅供参考
无其他回答

...如何从一组数中挑出一部分数, 使它们的和最接近确定的某个值...
先将数据按从大到小或从小到大的顺序排列,确定的某个值的几分之一与其中的哪一个数接近就选哪个数据的前后对应的几个数字,这样求出的和应该最接要求。

排列组合公式计算公式是什么?
排列组合计算公式如下:排列数:从n个中取m个排一下,有n(n-1)(n-2)……(n-m+1)种,即n!\/(n-m)!组合数:从n个中取m个,相当于不排,就是n!\/[(n-m)!m!]。从n个不同元素中,任取m(m≤n)个元素并成一组,叫做从n个不同元素中取出m个元素的一个组合;从n个不...

排列组合公式 从n个不同元素中取出m个元素的一个排列
1、排列组合公式:从n个不同元素中,任取m(m≤n,m与n均为自然数,下同)个不同的元素按照一定的顺序排成一列,叫做从n个不同元素中取出m个元素的一个排列;从n个不同元素中取出m(m≤n)个元素的所有排列的个数,叫做从n个不同元素中取出m个元素的排列数,用符号 A(n,m)表示。2、此外...

数学排列组合公式
在数学领域,排列组合公式是一种用于计算从一组不同元素中选取和排列特定数量元素的方法。当需要从n个不同的元素中挑选m个元素(其中m小于或等于n)的所有可能排列时,我们称之为从n个不同元素中取出m个元素的排列数。这一计算结果通常用A(n,m)来表示,其中A代表排列的意思,n和m分别代表总元素数...

排列组合公式怎样计算?
排列组合计算公式如下:1、从n个不同元素中取出m(m≤n)个元素的所有排列的个数,叫做从n个不同元素中取出m个元素的排列数,用符号 A(n,m)表示。2、从n个不同元素中,任取m(m≤n)个元素并成一组,叫做从n个不同元素中取出m个元素的一个组合;从n个不同元素中取出m(m≤n)个元素...

给你n个自然数,从中任意选m(m<n)个相加,有多少种组合?
Cm,n=n!\/(m!*(n-m)!)乘法原理的话,就是,在选第一个数的时候,有n种选法,在选第二个数的时候,由于第一个数选了一个,剩了n-1个数,所以有n-1种选法,以此类推,到选第m个数的时候,有n-m种选法,把所有的乘起来就是n*(n-1)*(n-2)*(n-3)*...*(n-m),但是,这些...

数学的排列组合算法加公式
不能重复的c(6,4) c(6,5) 1,2,3...,n n个数中 任取m个组合 c(n,m) 能重复的 6^4 6^5 1,2,3,。。。n,n个数中,取m个组合(可重复) n^m 追问: c(n,m),读作什么?把1-6取4位带进去怎么算,可以教我吗?50分感激不尽 回答: 这个是组合数 从...

排列组合到底怎么算?
排列是从n个不同元素中取出m个元素按一定的顺序排成一列,它的数目通常用符号Pₙₘ或P来表示。计算公式为:Pₙₘ = n × × ... × 。例如,从5个不同的数字中取出3个数字进行排列,那么排列的数量就是 5 × 4 × 3 = 60。组合的计算:组合是从n个不同...

求C算法,排列组合问题。
如果是问题2:那么为了避免抽取多次,需要先排序,再比较排序后的所有相邻的数的差值存入另外数组,(例如4(M=9)个数1,3,5,9 ,17,26,36,47,48。则差值为2,2,4,8,9,10,11,1存入数组,如果你要抽取的数N是1,那么最小差值一定是1,如果你要抽取的N是2,那么最小差值是1+2...

排列组合算法 简介排列组合算法
1、排列有两种定义,但计算方法只有一种,凡是符合这两种定义的都用这种方法计算。2、定义的前提条件是m≦n,m与n均为自然数。3、从n个不同元素中,任取m个元素按照一定的顺序排成一列,叫做从n个不同元素中取出m个元素的一个排列。4、从n个不同元素中,取出m个元素的所有排列的个数,叫做从n...

相似回答