Adloun

algorithmique (école d'ingénieur) · Chapitre 4 · Exercice de TD

Au plus entrepôts approvisionnés

Répartition optimale d'une ressource · niveau 3 (difficile)

Énoncé

Chaque livraison non nulle coûte un camion ; l'entreprise n'en a que . Au plus entrepôts peuvent donc recevoir une livraison.

  • On note le gain maximum d'une répartition du stock sur les premiers entrepôts dont au plus reçoivent une livraison non nulle. Établir la récurrence.
  • Écrire le programme (tableau à trois dimensions) et la fonction d'affichage d'une répartition optimale.
  • Sur les gains du chapitre (), donner le gain maximum pour .
  • Quelle est la complexité ?

Corrigé

  • Supposons le problème résolu. Ou bien le -ème entrepôt ne reçoit rien, et les premiers se partagent le stock avec au plus livraisons ; ou bien il reçoit unités, ce qui consomme un camion.

Base. pour tous et .

Hérédité. , , :

  • Le tableau a trois dimensions ; l'argument indique la livraison du -ème entrepôt, et l'on décrémente seulement si elle est non nulle.

static int[][][] calculer(int[][] G, int K, int[][][] A) {
    int n = G.length, S = G[0].length - 1;
    int[][][] M = new int[n + 1][S + 1][K + 1];             // base : M[0][s][u] = 0
    for (int k = 1; k < n + 1; k++)
        for (int s = 0; s < S + 1; s++)
            for (int u = 0; u < K + 1; u++) {
                M[k][s][u] = M[k - 1][s][u]; A[k][s][u] = 0;     // rien au k-ème
                if (u > 0)
                    for (int sp = 1; sp < s + 1; sp++) {         // livraison non nulle
                        int v = G[k - 1][sp] + M[k - 1][s - sp][u - 1];
                        if (v > M[k][s][u]) { M[k][s][u] = v; A[k][s][u] = sp; }
                    }
            }
    return M;
}

static void afficher(int[][][] A, int[][] G, int k, int s, int u) {
    if (k == 0) return;
    int a = A[k][s][u];
    afficher(A, G, k - 1, s - a, a > 0 ? u - 1 : u);   // les k-1 premiers affichés
    if (a > 0) System.out.printf(" %d<--%d", k - 1, a); // puis le k-ème
}

-


K = 0 : gain maximum 0 :
K = 1 : gain maximum 5 : 0<--4
K = 2 : gain maximum 9 : 0<--4 2<--1
K = 3 : gain maximum 10 : 0<--3 2<--1 3<--1
K = 4 : gain maximum 10 : 0<--3 2<--1 3<--1

Au-delà de trois camions, la contrainte ne joue plus : la répartition optimale du chapitre n'approvisionne que trois entrepôts.

  • Il y a cases, chacune demandant au plus essais : .

100 % gratuit

La suite du chapitre est sur Adloun

Exercice suivant et tuteur

Sans compte : le cours, le premier QCM et 2 minutes de podcast et de vidéo. Exercices et tuteur : inscription gratuite en 30 secondes, sans carte bancaire.

Le cours du chapitre · Tous les exercices du chapitre

Exercice suivant et tuteur →