算法征集!!各位大牛踊跃参加啊!!
问题:
C# code
int[] i = new int[] { 1, 2, 3, 4, 5,....100 };
数组中10个数字任意组合,组合不能重复。
组合相加的和等于150。
组合后由小到大排序。
组合内数字不能重复。
求解一共有多少组合方式。
大牛踊跃发表高见,不要保留啊。
------解决方案--------------------最简单的一种:十重循环。会写代码的都会。
------解决方案--------------------难以想象,有什么好算法
------解决方案--------------------除了10个循环外 还有什么好方法吗?
i0 取值(1->10)
i1 取值(2->?)
....
i9 取值(20->100)
i0<i1<...<i8<i9
------解决方案--------------------一般这种问题都是 回溯+剪枝
------解决方案--------------------是否允许0和负数?
------解决方案--------------------自己搞个公式推导吧 或许数学上有现成的算法
现在的思路
1<=a1<a2<a3……<a9<a10<=100
a1+a2+a3+……+a10=150
设a2=a1+b1 n1>=0
然后替换 依次这么搞 得到 10a1+9b1+……+j=150
后面不会了…… 在抽象抽象
------解决方案--------------------自己搞个公式推导吧 或许数学上有现成的算法
现在的思路
1<=a1<a2<a3……<a9<a10<=100
a1+a2+a3+……+a10=150
设a2=a1+b1 n1>=0
然后替换 依次这么搞 得到 10a1+9b1+……+j=150
后面不会了…… 在抽象抽象
------解决方案--------------------from students in student where 条件
------解决方案--------------------求解的个数用动态规划可以,看看这个帖子。
http://topic.csdn.net/u/20091227/22/dc110ef5-becd-4a63-af8c-8531557b627d.html
to:xiaoh
忙的怎样了?
------解决方案--------------------