Мой метод решения этой проблемы? ... Конечно, детка .... Вот ты иди .. заслужил серебряное блюдо.
[1] Поиск в Google, скажем, рассмотрим проблему аккуратной печати абзаца на принтере
[2] Выберите, скажем, ~ 10 сайтов, которые не являются очевидными побрякушками.
[3] Взгляните на исходный код на сайте ... выберите код, который хорошо структурирован и содержит множество комментариев.
[4] Вставьте его в визуальную студию .. напишите какой-нибудь быстрый код, который исключает алгоритм.
[5] Следите за ходом кода и сравните его с заявленной проблемой.
[6] Проверьте несколько результатов вручную. Если они не пройдут, перейдите к шагу 3.
[7] Выполните код, пока не поймете, как он работает.
И вот, пожалуйста ... Как научиться чему угодно за 7 безболезненных шагов.
Напитки все вокруг ...
Могу я принести тебе еще один коктейль?
Это вам удачный день ... У меня хорошее настроение ... Итак, вот небольшой псевдокод для вас .... с first Google hit ... даже есть номера строк, поэтому вы можете задавать вопросы о определенных строках ... славных дней ... grrrr.
Lets assume that for all k s where 1 <= k <= n lk < M. PRINT_NEATLY is a bottom-up dynamic-proramming algorithm for the above recursive equation.
Lets create another array lineend[n] to record the end of line word number.
PRINT_NEATLY(n, M, l)
1 for i <-- n to 1
2 p <-- i
3 CharsLeft <-- M - lp
4 while (CharsLeft - lp+1 -1) > 0 and p < n
5 do CharsLeft <-- CharsLeft - lp+1 - 1
6 p <-- p + 1
7 if p = n
8 then c[i] <-- 0
9 lineend[i] <-- n
10 else
11 c[i] <-- a big number, probably the Maximum nuber for this type.
12 sum_lk <-- 0
13 for j <-- i to p
14 sum_lk <-- sum_lk + lj
15 cost <-- ( M -j + i - sum_lk )3 + c[j+1]
16 if cost < c[i]
17 then c[i] <-- cost
18 lineend[i] <-- j
19 // Print paragraph
20 start <-- 1
21 while start <= n
22 do
23 for word <-- start to lineend[start]
24 print ln
25 print newline
26 start <-- lineend[start] + 1