public class load {
static int n;//箱子数
static int []xiangziweight;//箱子重量数组
static int reduce;//可选择重量和
static int []jie;//解空间
static int []bestjie;//最佳解空间
static int shipweight;//船负荷
static int nowweight;//目前重量
static int bestweight;//最佳重量
static int maxloading(int[]xzw,int sw,int nn,int []JIE ) {
xiangziweight=xzw;
shipweight=sw;
n=nn;
jie=JIE;
for(int i=0;i<n;i++) {
reduce+=xiangziweight[i];
}
nowweight = 0;
bestweight=0;
backtrack(0);
return bestweight;
}
static void backtrack(int p) {
if(p>n) {
for(int h=0;h<n;h++) {
bestjie[h]=jie[h];
}
bestweight=nowweight;
return;
}
reduce=reduce-xiangziweight[p];
if(nowweight+xiangziweight[p]<=shipweight) {
jie[p]=1;
nowweight+=xiangziweight[p];
backtrack(p+1);
nowweight-=xiangziweight[p];
}
if(nowweight+reduce>bestweight) {
jie[p]=0;
backtrack(p+1);
}
reduce+=xiangziweight[p];
}
public static void main(String[] args) {
int []a= {5,2,1,3};
int b=10;
int c=4;
int d[]= {0,0,0,0};
maxloading(a,b,c,d);
System.out.print(bestweight);
}
}