2016-07-28 22 views
0

Ich habe ein algorithmisches Problem. Ich habe versucht zu lösen, konnte aber keine Lösung finden. Ich weiß, dass es mit DP gelöst werden kann, aber nicht ganz die Nische bekommen. Eine rekursive dp mit Memoization Algo wäre ideal für mich zu verstehen. Sogar ein kleiner Hinweis oder Link kann tun. Die Problemstellung ist:Maximierung des Gewinns mit DP?

„Ein Ladenbesitzer hat‚n‘Äpfel Gewicht einen i An jedem Tag, den er genau eine der Äpfel verkauft aber durch Bakterien, die Äpfel ihre Gewichte verlieren und damit der Ladenbesitzer verdient.. ein Gewinn von einem i% d (dh ein i mod d) wenn er den Apfel Gewicht verkauft ein i am Tag ‚d‘. Was der maximale Gewinn ist, kann der Ladenbesitzer machen“

Eingabe: Die erste Zeile ist 'n' und die zweite Zeile enthält Gewichte von n Äpfel.

Beispiel:

Input:

Output:

Erläuterung: Der Ladeninhaber den Apfel 4 am ersten Tag verkauft und der Apfel 3 am zweiten Tag. Daher Profit = 4% 1 + 3% 2 = 1

+1

Die Problemstellung macht wenig Sinn. Der Wert der Äpfel nimmt im Laufe der Zeit nicht ab. 4% 1 = 0, 4% 2 = 0, 4% 3 = 1, 4% 4 = 0, 4% 5 = 4, 4% 6 = 4 ... – m69

+0

Wie viele Äpfel hat der Ladenbesitzer? – ead

+0

Das Problem würde mehr Sinn ergeben, wenn der Ladenbesitzer am d-ten Tag einen Gewinn von a_i/d verdient hätte. Mod zu nehmen scheint wirklich komisch. – user172818

Antwort

3

Dies kann ich mit Maximum Weight Matching in einem Bipartite Graph gelöst werden.

Ladenbesitzer hat n Äpfel und er hat jeden Apfel zu einem Tag von 1 to n zuweisen. Er kennt auch die jeweiligen Gewinne.

Somit kann ein vollständiger bipartiter Graph nxn gebildet werden und die maximale Gewichtsanpassung kann mit dem ungarischen Algorithmus erreicht werden.

+0

meinst du "maximale gewichtete zweiteilige Übereinstimmung"? – ead

+0

Ja. Natürlich ist es gewichtet. –