Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.io.FileNotFoundException;
- import java.io.FileReader;
- import java.io.PrintWriter;
- import java.util.*;
- public class Main {
- public static void main(String[] args) throws FileNotFoundException {
- int n = 0;
- int k = 0;
- Scanner fileIn = new Scanner (new FileReader("PKO_in_2_Dargiewicz.txt"));
- PrintWriter fileOut = new PrintWriter("PKO_out_2_Dargiewicz.txt");
- ArrayList<Integer> values2 = new ArrayList<>();
- ArrayList<Integer> numberOfCoins2 = new ArrayList<>();
- while(fileIn.hasNext()){
- n = fileIn.nextInt();
- for (int i = 0; i < n; i++) {
- values2.add(i, fileIn.nextInt());
- }
- for (int i = 0; i < n; i++) {
- numberOfCoins2.add(i, fileIn.nextInt());
- }
- k = fileIn.nextInt();
- }
- int[] values = new int[n];
- int[] numberOfCoins = new int[n];
- for(int i = 0; i < n; i++){
- values[i] = values2.get(i);
- numberOfCoins[i] = numberOfCoins2.get(i);
- }
- List<Integer[]> results = solutions(values, numberOfCoins, new int[n], k, 0);
- Integer minimalNumber = GetMinimalNumber(results);
- fileOut.println(minimalNumber);
- for (Integer[] result : results){
- System.out.println(Arrays.toString(result));
- }
- for(Integer[] currentArray : results){
- Integer sum = 0;
- for (Integer aCurrentArray : currentArray)
- if (aCurrentArray != 0)
- sum += aCurrentArray;
- if(sum == minimalNumber) {
- for (Integer aCurrentArray : currentArray)
- fileOut.print(aCurrentArray + " ");
- fileOut.println();
- }
- }
- fileIn.close();
- fileOut.close();
- }
- public static Integer GetMinimalNumber(List<Integer[]> results) {
- Integer[] numbers = new Integer[results.size()];
- Integer counter = 0;
- for(Integer[] currentArray : results){
- Integer sum = 0;
- for (Integer aCurrentArray : currentArray)
- if (aCurrentArray != 0)
- sum += aCurrentArray;
- numbers[counter] = sum;
- counter++;
- }
- for(Integer I : numbers)
- System.out.println(I);
- Integer minimalNumber = numbers[0];
- for(Integer I : numbers)
- if(I < minimalNumber)
- minimalNumber = I;
- return minimalNumber;
- }
- public static List<Integer[]> solutions(int[] values, int[] ammounts, int[] variation, int price, int position){
- List<Integer[]> resultList = new ArrayList<>();
- int value = compute(values, variation);
- if (value < price){
- for (int i = position; i < values.length; i++) {
- if (ammounts[i] > variation[i]){
- int[] newvariation = variation.clone();
- newvariation[i]++;
- List<Integer[]> newList = solutions(values, ammounts, newvariation, price, i);
- if (newList != null){
- resultList.addAll(newList);
- }
- }
- }
- } else if (value == price) {
- resultList.add(copyArray(variation));
- }
- return resultList;
- }
- public static int compute(int[] values, int[] variation){
- int value = 0;
- for (int i = 0; i < variation.length; i++) {
- value += values[i] * variation[i];
- }
- return value;
- }
- public static Integer[] copyArray(int[] array){
- Integer[] copy = new Integer[array.length];
- for (int i = 0; i < array.length; i++) {
- copy[i] = array[i];
- }
- return copy;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement