背包算法的一个应用

来自今天论坛上的一个贴

 

任意给一数组,如{-10,45,35,99,10,6,9,20,17,18}
再任意给一个值,如35.
请从上面的数组中找出所有的组合,使他们的和等于35.
例如对于上面的数组,所有的组合情况为:
35;
-10+45;
17+18;
6+9+20;
-10+35+10;
-10+17+18+10;
-10+6+9+20+10;
注意,每一种组合中一个数只能出现一次。

 

 

传说中这叫背包算法

 

 private static int [] bags = { - 10 , 45 , 35 , 99 , 10 , 6 , 9 , 20 , 17 , 18 };  
   
public static int total( int index, int sum) {
       
if (index > bags.length - 1 ) {
           
return 0 ;
        }
       
if (sum >= bags[index]) {
           
int result = total(index + 1 , sum - bags[index]);
           
if (result == sum - bags[index]) {
                System.out.print(bags[index]
+ " " );
               
return sum;
            }
        }
       
return total(index + 1 , sum);
    }

   
public static void main(String args[]) {
       
for ( int i = 0 ; i < bags.length ; i ++ ){
            total(i,
35 );
        }
    }

 

你可能感兴趣的:(算法,String)