Эта проблема является NP-сложной?

Я пытаюсь придумать разумный алгоритм решения этой проблемы:

Допустим, у вас есть куча шаров. Каждый шар имеет как минимум один цвет, но может быть и разноцветным. На каждом шаре также есть номер. Также есть несколько коробок, каждая только одного цвета. Цель состоит в том, чтобы максимизировать сумму чисел на шарах в коробках, и единственные правила:

  • чтобы поместить мяч в коробку, нужно Каждый шар имеет как минимум один цвет, но может быть и разноцветным. У каждого шара также есть номер ...

    Я пытаюсь придумать разумный алгоритм решения этой проблемы:

    Допустим, у вас есть куча шаров. Каждый шар имеет как минимум один цвет, но может быть и разноцветным. На каждом шаре также есть номер. Также есть несколько коробок, каждая только одного цвета. Цель состоит в том, чтобы максимизировать сумму чисел на шарах в коробках, и единственные правила:

    • чтобы поместить мяч в коробку, нужно Каждый шар имеет как минимум один цвет, но может быть и разноцветным. У каждого шара также есть номер ...

      Я пытаюсь придумать разумный алгоритм решения этой проблемы:

      Допустим, у вас есть куча шаров. Каждый шар имеет как минимум один цвет, но может быть и разноцветным. На каждом шаре также есть номер. Также есть несколько коробок, каждая только одного цвета. Цель состоит в том, чтобы максимизировать сумму чисел на шарах в коробках, и единственные правила:

      • чтобы поместить мяч в коробку, нужно Также есть несколько коробок, каждая только одного цвета. Цель состоит в том, чтобы максимизировать сумму чисел на шарах в коробках, и единственные правила:

        • чтобы поместить мяч в коробку, нужно Также есть несколько коробок, каждая только одного цвета. Цель состоит в том, чтобы максимизировать сумму чисел на шарах в коробках, и единственные правила:

          • чтобы поместить мяч в коробку, нужно должен как минимум иметь цвет коробки на нем
          • вы можете положить только один мяч в каждую box.

          Например, вы можете поместить сине-зеленый шар в синий или зеленый ящик, но не в красный ящик.

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

          Мне просто любопытно, есть ли какой-то динамический алгоритм для этого типа задач, или это просто замаскированная задача коммивояжера. Помогло бы я, если бы я знал, что существует не более X цветов? Любая помощь приветствуется. Спасибо!


          Edit - вот простой пример:

          Balls: шаблон <класс T> класс Pattern { public: Pattern (...

          У меня нет ошибки соответствующей функции-члена, когда я пытаюсь скомпилировать этот код на моем компиляторе mingw32

          #include <iostream> 
          using std::cout;
          template <class T>
          class Pattern
          {
          public:
              Pattern(): element(){
          
                  cout<< "default c-tor";
                  }
          
              Pattern(Pattern &copy): element(copy.element){
          
                  cout<< "copy c-tor";
          
                  }
          
              Pattern& operator=(Pattern &assgn)
              {
                  cout<<" assignment operator";
                 element = assgn.element;
                 return *this;
              }
          
              ~Pattern(){
          
                  cout<<"destructor";
          
                  }
          
          private:
               T element;
          };
          
          template <class T>
          Pattern<T> creator()
          {
             cout<< "Testing creator";
             Pattern<T> pat;
             return pat;
          }
          
          int main()
          {
             Pattern<double> pt1(creator<double>());
             Pattern<double> pt2 = creator<double>();
          }
          

          Кто-нибудь, пожалуйста, скажите мне, как решить проблему.

5
задан Chubsdad 3 October 2010 в 13:30
поделиться