编辑代码

import java.util.Scanner;
public class Main {
static int SetCapacity=0;//背包的初始容量
static int MaxCapacity=0;//使用了背包多少容量
static int MaxValue=0;//最大价值
static void method(int[][] arr,int k,int capacity,int value){
for (int i=k;i<arr.length;i++){
if (SetCapacity-capacity>=arr[i][0]){//判断当前背包的剩余容量是否可以装下第i个物品
capacity+=arr[i][0];
value+=arr[i][1];
method(arr,i+1,capacity,value);
//回溯
capacity-=arr[i][0];
value-=arr[i][1];
}else{//如果不行,则跳过第i个物品,继续递归后面的物品,看是否可以装下。
if (capacity>=SetCapacity)//如果背包装不下了,则退出循环,返回上一次递归
break;
method(arr,i+1,capacity,value);
}
}
if (value>MaxValue){
MaxValue=value;
MaxCapacity=capacity;
}
}
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
SetCapacity=sc.nextInt();
int[][] arr=new int[n][2];
for (int i=0;i<n;i++){//物品大小
arr[i][0]=sc.nextInt();
}
for (int i=0;i<n;i++){//物品价值
arr[i][1]=sc.nextInt();
}
method(arr,0,0,0);
System.out.println(MaxCapacity+" "+MaxValue);//9 17
}
}