java数组一个有点棘手的算法问题

有这样一个已排好序的数组
int[] source = {20,18,17,14,7,5,5,3,3,2,1};
现在想要对这个数组里面的数进行分组,
分组依据是:
1,每组数据之和是20;
2,如果不能满足条件1,取可组合的最大值(不大于20)
3,分组的数量最少
比如题中的数组分完组后的结果是:

group[0] = {20};//索引:0
group[1] = {18,2};//索引:1,9
group[2] = {17,3};//索引:2,7
group[3] = {14,5,1};//索引:3,5,10
group[4] = {7,5,3};//索引:4,6,8

结果是获取的每个索引,当然为了简便编写也可以自定义对象
请问这个方法要怎么写....要如何递归呀

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^