In diesem Übungsblatt geht es darum, einen Algorithmus zu finden, der nach dem Prinzip Divide et Impera arbeitet. Das Gesamtproblem soll also rekursiv in zwei kleine Probleme zerlegt werden, und die Gesamtlösung setzt sich nachher aus den Teillösungen zusammen.
Jetzt - wo die Biergärten wieder locken - wird es Zeit, das Übungsblatt mal unter das Motto einer virtuellen Kneipentour zu stellen. Und dazu nehmen wir uns am Besten die Stadt Düsseldorf als Beispiel, denn dort gibt es die längste Theke der Welt1.
Stellen wir uns für unser Blatt also eine Reihe von benachbarten Biergärten (in Düsseldorf: ``Kneipen'') vor, in denen Sie immer auf eine Gruppe von Leuten treffen, die Sie kennen und mit denen Sie ein wenig bei ``geistigen Getränken'' verweilen. Stellen wir uns weiter vor, bei manchen Biergärten würden Sie von Ihren Bekannten eingeladen, in den anderen müssen Sie die Bekannten einladen, wobei die Beträge, die Sie jeweils ausgeben müssen (negativ) bzw. spendiert bekommen (positiv), im voraus für jede Kneipe feststehen.
Nehmen wir als Beispiel die folgende Tabelle:
Kneipe Nr. | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
Betrag in Euro | 3,10 | -4,10 | 5,90 | 2,60 | -5,30 | 5,80 | 9,70 | -9,30 | -2,30 | 8,40 |
Als (Wahl-)Schwabe sind sie nun daran interessiert, eine Kneipentour dergestalt zu planen, daß Sie am Ende des Abends so viel wie möglich spendiert bekommen haben. Wobei für Ihre Kneipentour eine Einschränkung gilt: Sie dürfen nur nebeneinander liegende Biergärten (d.h. keine Auslassungen) und jeden Biergarten nur (höchstens) einmal besuchen.
Mit anderen Worten: Sie suchen also ein Paar von Biergärten ( und ), so daß der Saldo aus dem Besuch dieser und aller dazwischen liegenden Biergärten möglichst hoch ist. Falls es nur Biergärten geben sollte, in denen Sie etwas spendieren müssen, so bleiben Sie zu Hause (d.h. der Saldo ist 0).
Alles klar? Prima, dann ist die Aufgabenstellung schnell klar:
Schreiben Sie ein Java-Programm, das die Beträge einer wie oben gezeigten Tabelle einliest und daraus den maximal möglichen Saldo errechnet. Ihr Programm muß dabei nach dem Divide et Impera- Prinzip vorgehen.
Erweitern Sie Ihre Lösung aus Teil a dahingehend, daß sie Ihnen auch den Anfangs- und Endbiergarten Ihrer Kneipentour angibt.
Viel Erfolg -- Und Prost!