Po pierwsze, to łatwo zauważyć, że uogólnienie problemu jest NP-Hard, i to natychmiast reduceable z Knapsack Problem:
Biorąc pod uwagę problem plecakowy: weight=W, costs_of_items=C, weight_of_items=X
, zmniejszyć problem tego problemu bez ograniczeń na liczba graczy (uogólnienie będzie wynosić co najwyżej k
graczy, gdzie wybrano k
).
Można więc stwierdzić, że nie istnieje znane rozwiązanie problemu czasu wielomianowego.
Ale możemy opracować rozwiązanie oparte na knapsack pseudo-polynomial solution.
Dla uproszczenia, załóżmy, że mamy ograniczenie tylko w odniesieniu do liczby małych forwardów (zasady dotyczące odpowiedzi można zastosować, aby dodać więcej ograniczeń).
Następnie, problem może być rozwiązany za pomocą następującego procesu rekurencyjnego:
if i is not a forward, same as the original knapsack, while maintaining the #forwards
f(i,points,forwards) = max {
f(i-1,points-C[i],forwards)
f(i-1,points,forwards)
}
if i is a forward:
f(i,points,forwards) = max {
//We used one of the forwards if we add this forward to the team
f(i-1,points-C[i],forwards-1)
f(i-1,points,forwards)
}
bazy zostanie zerami w których jeden z wymiarów jest Zero f(0,_,_)=f(_,0,_)=0
(jak regularny plecaka) i f(_,_,-1)=-infnity
(nieprawidłowy rozwiązanie)
Odpowiedź będzie następująca: f(2,W,n)
(2, jeśli chodzi o liczbę przekierowań, jeśli jest ona inna, również należy ją zmienić). W
to limit zarobków, a n
to liczba graczy.
Rozwiązanie DP wypełni macierz reprezentującą rekursję bottom-up, aby uzyskać roztwór czasu pseudopylomialnego (Pseudo-wielomian jest tylko wtedy, gdy ograniczenia są stałe).
Po powtórzeniu procesu i dodaniu wymiaru do każdego kryterium , problem zostanie rozwiązany optymalnie za pomocą rozwiązania DP.
Złożoność dostaniesz to O(B^p * W * n)
- gdzie:
B
jest „czynnikiem oddział” - liczba graczy na pozycji + 1 (do zera) w przypadku B=3
.
W
= pułap wynagrodzeń
n
= liczba graczy, aby wybrać spośród
Jeśli znaleźć optymalne rozwiązanie zbyt czasochłonne, bym proponuję jechać do heurystycznych rozwiązań, takich jak hill climbing lub Genetic Algorithms, który spróbuje zoptymalizować wynik tak bardzo, jak tylko może, ale nie ma gwarancji, że znajdzie globalne maksima.
Bez ostatniego ograniczenia problem można łatwo zredukować do [problemu plecakowego] (http://en.wikipedia.org/wiki/Knapsack_problem), który ma rozwiązanie czasowe pseudominomialne. – amit
Na pewno James, Williams, Mack jest lepszy - 9500 $, 65 punktów? – Chowlett
Każdy gracz może grać tylko jedną pozycję, prawda? –