去吃饭了,就不写注释了。。。
package com.company;
import com.zw.IO.FileOPeration;
import java.io.File;
import java.io.IOException;
import java.util.Collection;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;
import java.io.PrintWriter;
public class Problem_11 {
static File inputfile;
static File outputfile;
static int[] inputarray;
static int n;
static int Capacity;
public static void main(String [] args)throws IOException{
//int [] cc = {7,2,6,5,4};
//int max = findMaxLoadCapacity(cc,10);
// System.out.print(max);
fileOperation();
for(int i=0;i<n;i++){
System.out.print(inputarray[i]+" ");
}
int max = findMaxLoadCapacity(inputarray,Capacity);
System.out.println();
System.out.print("最大载重量为 "+max);
}
private static void fileOperation()throws IOException {
inputfile = new File("input.txt");
outputfile = new File("output.txt");
Scanner input = new Scanner(inputfile);
PrintWriter output = new PrintWriter(outputfile);
n = input.nextInt();
inputarray = new int[n];
Capacity = input.nextInt();
for(int i=0;i<n;i++){
inputarray[i] = input.nextInt();
}
}
/**
* @param c 集装箱重量数组
*
*
* @param Capacity 船的最大载重
* @return
*/
static int findMaxLoadCapacity(int [] c,int Capacity){
int maxLoadCapacity=0,currentLoadCapacity=0;
int i = 0;
int n = c.length;
Queue<Integer> queue = new LinkedList<>();
queue.offer(-1);
while (!queue.isEmpty()){
if(i<n&¤tLoadCapacity + c[i] <= Capacity){
maxLoadCapacity = enQueue(queue,n,i,maxLoadCapacity,currentLoadCapacity+c[i]);//x[i]=1
maxLoadCapacity = enQueue(queue,n,i,maxLoadCapacity,currentLoadCapacity); //x[i]=0
currentLoadCapacity = queue.poll();
if(currentLoadCapacity==-1){
if(queue.isEmpty()) return maxLoadCapacity;
else{
queue.offer(-1);
currentLoadCapacity = queue.poll();
i++;
}
}
}
else if(i<n&& currentLoadCapacity + c[i] > Capacity){
maxLoadCapacity = enQueue(queue,n,i,maxLoadCapacity,currentLoadCapacity); //x[i]=0
currentLoadCapacity = queue.poll();
if(currentLoadCapacity==-1){
if(queue.isEmpty()) return maxLoadCapacity;
else{
queue.offer(-1);
currentLoadCapacity = queue.poll();
i++;
}
}
}
else{
break;
}
}
return maxLoadCapacity;
}
static int enQueue(Queue<Integer> queue,int n,int i,int maxLoad,int load){
if(i<n){
if(load>maxLoad) maxLoad=load;
queue.offer(load);
}
return maxLoad;
}
}