Étant donné un tableau d'entiers, de trouver le PLUS grand nombre en utilisant les chiffres du tableau tel qu'il est divisible par 3

E. g.: Tableau: 4,3,0,1,5 {Assumer tous les chiffres sont >=0. Aussi chaque élément dans le tableau correspondent à un chiffre. c'est à dire que chaque élément de la matrice est entre 0 et 9. }

Dans le tableau ci-dessus, le plus grand nombre est: 5430 {l'aide de chiffres 5, 4, 3 et 0 du tableau}

Mon Approche:

De divisibilité par 3, nous avons besoin de la somme des chiffres soit divisible par 3.
Donc,

  1. Étape 1: Supprimer tous les zéros de la matrice.
  2. Étape 2: Ces zéros à la fin. {Car ils ne pas affecter la somme, et nous devons trouver le plus grand nombre}
  3. Étape 3: Trouver le sous-ensemble des éléments du tableau (à l'exclusion des zéros) de telle sorte que le nombre de chiffres est MAXIMALE et que la somme des chiffres est MAXIMUM et la somme est divisible par 3.
  4. ÉTAPE 4: La chiffre comprend les chiffres ci-dessus trouvés dans l'ordre décroissant.

La principale étape est l'ÉTAPE 3 c'est à dire Comment trouver le sous-ensemble contient un MAXIMUM d'éléments tels que leur somme est MAX et est divisible par 3 .

Je pensais, peut-être les 3 pourrait être fait par le GOURMAND CHOIX de prendre tous les éléments et de les garder sur le retrait le plus petit élément dans le jeu jusqu'à la somme est divisible par 3.

Mais je ne suis pas convaincu que ce GOURMAND choix de travail.

Veuillez dire si ma démarche est correcte.
Si c'est le cas, veuillez indiquer comment faire, Étape 3 ?

Aussi, s'il vous plaît suggérer d'autres possibilités/algorithme efficace.

Ce que sur la force brute la production de toutes les possibilités ? C'est generatif toutes les combinaisons qui sont divisibles par 3, puis prendre le plus grand ?
l'étape 3 est un peu semblable, subset-sum problème, mais il sent aussi plus facile (il pourrait donc être solveable polynomialement après tout). Mais je doute gourmande va travailler ici.
Oui, la Force Brute est toujours une option. Mais j'ai été hinking si elle pouvait être fait d'une manière efficace.
Si nous utilisons subset-sum approche, alors nous aurons à examiner tous les multiples de 3: 3, 2*3, 3*3, 4*3 .. et ainsi de suite... Donc je suppose que deviendrait alors l'exponentielle.
Voici mon idée : Vous supprimer les zéros, ils seront ajoutés à la fin comme vous l'avez dit. N non nul chiffres Vous reste alors générer toutes les possibilités avec le maximum de longueur N. si vous trouvez quelque chose, vous prenez la valeur maximale. Peut-être trier les chiffres dans l'ordre décroissant peut être plus rapide. Si vous ne trouvez pas quelque chose, vous recherchez toutes les possibilités de longueur N-1, et ainsi de suite jusqu'à ce que vous trouver quelque chose.

OriginalL'auteur user1599964 | 2012-09-19