Retour aux défis
Difficile 0 résolus 0 % de réussite

Découper un rectangle en carrés

Trouvez le nombre minimal de découpes droites nécessaires pour obtenir uniquement des carrés.

Ce que vous allez apprendre

  • Définir une table de DP sur la largeur et la hauteur
  • Essayer chaque coupe horizontale et verticale
  • Réutiliser les résultats des rectangles plus petits

Problème

À chaque étape, choisissez un rectangle et coupez-le entièrement, parallèlement à l'un de ses côtés, de façon à obtenir deux rectangles dont les côtés sont des entiers strictement positifs. Continuez jusqu'à ce que chaque morceau soit un carré. Les carrés peuvent être de tailles différentes. Comptez le nombre de découpes, pas le nombre de morceaux.

Implémentez rectangle_cutting(height, width).

Entrée

height : La hauteur du rectangle de départ.

width : La largeur du rectangle de départ.

Sortie

Retournez le nombre minimal de découpes.

Contraintes

1 ≤ height, width ≤ 500. La rotation ne change pas la réponse.

Exemples

Exemple 1
Entrée :
width = 3
height = 2

Sortie attendue :
expected = 2
Entrée :
long long width = 3;
long long height = 2;

Sortie attendue :
long long expected = 2;
Entrée :
long width = 3;
long height = 2;

Sortie attendue :
long expected = 2;

Explication

Découpez un carré de 2 × 2, il reste un rectangle de 2 × 1. Une découpe supplémentaire sépare le reste en deux carrés unité.

Exemple 2
Entrée :
width = 4
height = 4

Sortie attendue :
expected = 0
Entrée :
long long width = 4;
long long height = 4;

Sortie attendue :
long long expected = 0;
Entrée :
long width = 4;
long height = 4;

Sortie attendue :
long expected = 0;

Explication

Le rectangle de départ est déjà un carré.

Comment l'aborder

Essayez d'abord seul, puis ouvrez les indices un par un.

Indice 1

Un rectangle peut être résolu en le divisant en deux plus petits rectangles et en combinant leurs meilleures réponses.

Indice 2

Teste toutes les coupures horizontales et verticales possibles pour գտiver le minimum.

Indice 3

La mémoïsation ou un tableau aide beaucoup, car de nombreux sous-rectangles se répètent.

Complexité attendue

temps O(h*w*(h+w)), espace supplémentaire O(h*w)

Références

Ce défi a été adapté pour CodeUtility. Suivez l'énoncé et les contraintes ci-dessus.

Apprenez des autres

Solutions de la communauté

Aucune solution publiée pour l'instant. Résolvez ce défi pour partager la première.