Zanim pomyślicie, że jest on duplikowany (jest wiele pytań z pytaniem, jak podzielić długie ciągi bez łamania słów), należy pamiętać, że mój problem jest nieco inny: kolejność nie jest ważna, a ja Aby dopasować słowa, aby wykorzystać każdą linię tak bardzo, jak to możliwe.Dzielenie długich ciągów bez łamania słów wypełnianie wierszy
Cześć,
Mam nieuporządkowana zestaw słów i chcę je połączyć bez użycia więcej niż 253 znaków.
Moim problemem jest to, że chcę spróbować wypełnić linię tak bardzo, jak to możliwe. Na przykład:
words = "a bc def ghil mno pq r st uv"
limit = 5 # max 5 characters
# This is good because it's the shortest possible list,
# but I don't know how could I get it
# Note: order is not important
good = ["a def", "bc pq", "ghil", "mno r", "st uv"]
# This is bad because len(bad) > len(good)
# even if the limit of 5 characters is respected
# This is equivalent to:
# bad = ["a bc", "def", "ghil", "mno", "pq r", "st uv"]
import textwrap
bad = textwrap.wrap(words, limit)
Jak mogę zrobić?
To jest problem programowania dynamicznego; zaatakuj go w ten sam sposób, w jaki zaatakowałeś [problem z wymianą monet] (http://www.geeksforgeeks.org/dynamic-programming-set-7-coin-change/). –