问题描述
有一个箱子容量为V(正整数,0<=V<=20000),同时有n个物品(0<n<=30),每个物品有一个体积(正整数)。
要求n个物品中,任取若干个装入箱内,使箱子的剩余空间为最小。
有一个箱子容量为V(正整数,0<=V<=20000),同时有n个物品(0<n<=30),每个物品有一个体积(正整数)。
要求n个物品中,任取若干个装入箱内,使箱子的剩余空间为最小。
输入格式
第一行为一个整数,表示箱子容量;
第二行为一个整数,表示有n个物品;
接下来n行,每行一个整数表示这n个物品的各自体积。
第二行为一个整数,表示有n个物品;
接下来n行,每行一个整数表示这n个物品的各自体积。
输出格式
一个整数,表示箱子剩余空间。
样例输入
24
6
8
3
12
7
9
7
样例输入
24
6
8
3
12
7
9
7
样例输出
0
1 import java.math.BigInteger; 2 import java.util.Arrays; 3 import java.util.Scanner; 4 5 6 public class Main { 7 static int n; 8 static int[] a; 9 static int mix = 200000; 10 public static void main(String[] args) { 11 Scanner input = new Scanner(System.in); 12 int sum = input.nextInt(); 13 n = input.nextInt(); 14 a = new int[n]; 15 for(int i=0;i<n;i++){ 16 a[i] = input.nextInt(); 17 } 18 f(sum,0); 19 System.out.println(mix); 20 21 } 22 public static int f(int sum,int i){ 23 if(sum<0) return -1; 24 if(i==n) {if(mix>sum) mix = sum;} 25 for(int j=i;j<n;j++){ 26 if(f(sum-a[j],j+1)==-1){ 27 if(mix>sum) mix = sum; 28 } 29 } 30 return sum; 31 32 33 34 35 } 36 }