import java.io.*; import java.util.List; import java.util.ArrayList; /** * The class Solver is an implementation of a greedy algorithm to solve the knapsack problem. * */ public class Solver { /** * The main class */ public static void main(String[] args) { try { solve(args); } catch (IOException e) { e.printStackTrace(); } } /** * Read the instance, solve it, and print the solution in the standard output */ public static void solve(String[] args) throws IOException { String fileName = null; // get the temp file name for(String arg : args){ if(arg.startsWith("-file=")){ fileName = arg.substring(6); } } if(fileName == null) return; // read the lines out of the file List lines = new ArrayList(); BufferedReader input = new BufferedReader(new FileReader(fileName)); try { String line = null; while (( line = input.readLine()) != null){ lines.add(line); } } finally { input.close(); } // parse the data in the file String[] firstLine = lines.get(0).split("\\s+"); int items = Integer.parseInt(firstLine[0]); int capacity = Integer.parseInt(firstLine[1]); int[] values = new int[items]; int[] weights = new int[items]; for(int i=1; i < items+1; i++){ String line = lines.get(i); String[] parts = line.split("\\s+"); values[i-1] = Integer.parseInt(parts[0]); weights[i-1] = Integer.parseInt(parts[1]); } // a trivial greedy algorithm for filling the knapsack // it takes items in-order until the knapsack is full int value = 0; int weight = 0; int[] taken = new int[items]; for(int i=0; i < items; i++){ if(weight + weights[i] <= capacity){ taken[i] = 1; value += values[i]; weight += weights[i]; } else { taken[i] = 0; } } // prepare the solution in the specified output format System.out.println(value+" 0"); for(int i=0; i < items; i++){ System.out.print(taken[i]+" "); } System.out.println(""); } }