Сумма подмножества с положительными и отрицательными целыми числами

Я должен реализовать вариант задачи суммы подмножеств, мой вклад будет положительным и отрицательным десятичным, также мне нужно будет знать подмножество, зная, что, к сожалению, существует, этого недостаточно.

Я пробовал алгоритмы, найденные в Википедии, но я не могу заставить их работать с отрицательными числами, а также я не могу найти способ получить подмножество, если оно существует.

Может ли кто-нибудь указать мне, где я мог бы найти псевдокод, документацию или реализацию для этого алгоритма.

1 ответ

Я написал код на Java, он проверяет все возможности

import java.util.*;

public class StackOverFlow {

    public static <T> Set<Set<T>> powerSet(Set<T> originalSet) {
        Set<Set<T>> sets = new HashSet<Set<T>>();
        if (originalSet.isEmpty()) {
            sets.add(new HashSet<T>());
            return sets;
        }
        List<T> list = new ArrayList<T>(originalSet);
        T head = list.get(0);
        Set<T> rest = new HashSet<T>(list.subList(1, list.size())); 
        for (Set<T> set : powerSet(rest)) {
            Set<T> newSet = new HashSet<T>();
            newSet.add(head);
            newSet.addAll(set);
            sets.add(newSet);
            sets.add(set);
        }       
        return sets;
    }

    public static int sumSet(Set<Integer> set){
        int sum =0;
        for (Integer s : set) {
            sum += s;
        }
        return sum;     
    }

    public static void main(String[] args) {
         Set<Integer> mySet = new HashSet<Integer>();
         mySet.add(-1);
         mySet.add(2);
         mySet.add(3);

         int mySum = 4;
         for (Set<Integer> s : powerSet(mySet)) {
             if(mySum == sumSet(s))
                 System.out.println(s + " = " + sumSet(s));
         }
    }
}

Я надеюсь, что это помогает

Другие вопросы по тегам