public class 最优装载问题 {
// 有一批集装箱要装上一艘载重量为c的轮船。其中集装箱i的重量为Wi。最优装载问题要求确定在装载体积不受限制的情况下,将尽可能多的集装箱装上轮船。
//
// 编程任务: 对于给定的n个集装箱和轮船的载重量C,编程计算装入最多时的集装箱个数。
//
// 输入:
// 输入由多组测试数据组成。每组测试数据输入的第1行中有2个正整数n和C。正整数n是集装箱个数;正整数C是轮船的载重量。接下来的一行中有n个整数,分别表示n个集装箱的重量,它们之间用空格分隔。其中1<=n<=2000,所有正整数不超过231-1
// 输出:
// 对应每组输入,输出的每行是计算出的装入最多时的集装箱个数。
//
// 样例输入:
// 4 5
// 3 5 2 1
// 样例输出:
// 2
static int weightSum=7;
static int weights[]={3,5,2,1,3,1,2,1,1};
static int x[]={0,0,0,0,0,0,0,0,0};
static int sum=0;
static int counterMax=0;
public static void main(String[] args) {
backSort(0);
System.out.println("最多可以装的货物个数是"+counterMax);
}
private static void backSort(int step) {
if(step==weights.length){
int counter=0;
if(sum==weightSum){
for(int i=0;i<x.length;i++){
if(x[i]==1)
counter++;
}
if(counter>counterMax)
counterMax=counter;
}
}else{
for(int i=0;i<=1;i++){
x[step]=i;
if(i==0){
backSort(step+1);
}else{
if(sum+weights[step]<=weightSum){
sum+=weights[step];
backSort(step+1);
sum-=weights[step];
}
}
}
}
}
}
回朔法——最优装载问题
最新推荐文章于 2021-12-27 10:38:45 发布