Zurück zu den Herausforderungen
Schwierig 0 gelöst 0% Erfolgsquote

Schneide ein Rechteck in Quadrate

Finde die minimale Anzahl gerader Schnitte, um nur Quadrate zu erhalten.

Das lernst du

  • Eine DP-Tabelle über Breite und Höhe definieren
  • Jeden horizontalen und vertikalen Schnitt ausprobieren
  • Ergebnisse kleinerer Rechtecke wiederverwenden

Problem

Wähle bei jedem Zug ein Rechteck aus und schneide es vollständig, parallel zu einer Seite, sodass zwei Rechtecke mit positiven ganzzahligen Seitenlängen entstehen. Fahre fort, bis jedes Teilstück ein Quadrat ist. Die Quadrate dürfen unterschiedlich groß sein. Zähle die Schnitte, nicht die Stücke.

Implementiere rectangle_cutting(height, width).

Eingabe

height: Die Höhe des Startrechtecks.

width: Die Breite des Startrechtecks.

Ausgabe

Gib die minimale Anzahl der benötigten Schnitte zurück.

Einschränkungen

1 ≤ height, width ≤ 500. Eine Drehung verändert die Antwort nicht.

Beispiele

Beispiel 1
Eingabe:
width = 3
height = 2

Erwartete Ausgabe:
expected = 2
Eingabe:
long long width = 3;
long long height = 2;

Erwartete Ausgabe:
long long expected = 2;
Eingabe:
long width = 3;
long height = 2;

Erwartete Ausgabe:
long expected = 2;

Erläuterung

Schneide ein 2 × 2 Quadrat ab, es bleibt ein 2 × 1 Rechteck übrig. Ein weiterer Schnitt teilt den Rest in zwei Einheitsquadrate.

Beispiel 2
Eingabe:
width = 4
height = 4

Erwartete Ausgabe:
expected = 0
Eingabe:
long long width = 4;
long long height = 4;

Erwartete Ausgabe:
long long expected = 0;
Eingabe:
long width = 4;
long height = 4;

Erwartete Ausgabe:
long expected = 0;

Erläuterung

Das Startrechteck ist bereits ein Quadrat.

So gehst du vor

Versuch es zuerst allein und öffne dann einen Hinweis nach dem anderen.

Hinweis 1

Ein Rechteck lässt sich lösen, indem du es in zwei kleinere Rechtecke teilst und deren beste Antworten kombinierst.

Hinweis 2

Probiere jeden möglichen horizontalen und vertikalen Schnitt aus, um das Minimum zu finden.

Hinweis 3

Memoization oder eine Tabelle hilft, weil viele Teilrechtecke mehrfach vorkommen.

Erwartete Komplexität

Zeit O(h*w*(h+w)), zusätzlicher Speicher O(h*w)

Referenzen

Diese Aufgabe wurde für CodeUtility angepasst. Beachte die oben genannten Vorgaben und Einschränkungen.

Von anderen lernen

Community-Lösungen

Noch keine veröffentlichten Lösungen. Löse die Aufgabe und teile als Erster eine Lösung.