Разбить массив на n частей, чтобы длина массива макс. длины была минимальной) - VB
Формулировка задачи:
Всем здравствуйте, подскажите, как решить задачу:
есть массив L размерности n, массив заполнен элементами длины L-i
Надо разделить массив на P частей ( p - фиксированное, задаётся ручками) так, чтобы минимизировать длину массива максимальной длины. Сортировать массив нельзя.
Пример: массив размерности 5, элементы - 1,2,3,7,5.
P = 3. Тогда результат такой : 1,2,3 - 7 - 5
Если поможет, то P не может быть более 10.
Подскажите, какие идеи..
Заранее спасибо.
есть массив L размерности n, массив заполнен элементами длины L-i
Надо разделить массив на P частей ( p - фиксированное, задаётся ручками) так, чтобы минимизировать длину массива максимальной длины. Сортировать массив нельзя.
Пример: массив размерности 5, элементы - 1,2,3,7,5.
P = 3. Тогда результат такой : 1,2,3 - 7 - 5
Если поможет, то P не может быть более 10.
Подскажите, какие идеи..
Заранее спасибо.
Решение задачи: «Разбить массив на n частей, чтобы длина массива макс. длины была минимальной)»
textual
Листинг программы
<font color="blue">Option</font> <font color="blue">Explicit</font> <font color="blue">Private</font> <font color="blue">Const</font> ArrSize <font color="blue">As</font> <font color="blue">Integer</font> = <font color="darkblue"><b>15</b></font> <font color="#00AA00">'размер массива</font> <font color="blue">Private</font> <font color="blue">Const</font> NumParts <font color="blue">As</font> <font color="blue">Integer</font> = <font color="darkblue"><b>6</b></font> <font color="#00AA00">'количество частей</font> <font color="blue">Private</font> <font color="blue">Const</font> MinValue <font color="blue">As</font> <font color="blue">Integer</font> = <font color="darkblue"><b>0</b></font> <font color="#00AA00">'минимальное значение элемента (>=0)</font> <font color="blue">Private</font> <font color="blue">Const</font> MaxValue <font color="blue">As</font> <font color="blue">Integer</font> = <font color="darkblue"><b>100</b></font> <font color="#00AA00">'максимальное значение элемента</font> <font color="blue">Private</font> <font color="blue">Sub</font> Command1_Click() <font color="blue">Dim</font> Arr(<font color="darkblue"><b>1</b></font> <font color="blue">To</font> ArrSize) <font color="blue">As</font> <font color="blue">Integer</font> <font color="#00AA00">'основной массив</font> <font color="blue">Dim</font> Parts() <font color="blue">As</font> <font color="blue">Integer</font> <font color="#00AA00">'карта разреза</font> <font color="blue">Dim</font> BestParts() <font color="blue">As</font> <font color="blue">Integer</font> <font color="blue">Dim</font> BestDiff <font color="blue">As</font> <font color="blue">Long</font>, PartSum <font color="blue">As</font> <font color="blue">Long</font>, MinPartSum <font color="blue">As</font> <font color="blue">Long</font>, MaxPartSum <font color="blue">As</font> <font color="blue">Long</font>, ArrSum <font color="blue">As</font> <font color="blue">Long</font> <font color="blue">Dim</font> i <font color="blue">As</font> <font color="blue">Integer</font>, j <font color="blue">As</font> <font color="blue">Integer</font>, k <font color="blue">As</font> <font color="blue">Integer</font> <font color="blue">ReDim</font> Parts(<font color="darkblue"><b>1</b></font> <font color="blue">To</font> NumParts) <font color="blue">ReDim</font> BestParts(<font color="darkblue"><b>1</b></font> <font color="blue">To</font> NumParts) <font color="#00AA00">'набиваем массив случайными данными</font> <font color="blue">Randomize</font> ArrSum = <font color="darkblue"><b>0</b></font> <font color="blue">For</font> i = <font color="darkblue"><b>1</b></font> <font color="blue">To</font> ArrSize Arr(i) = Fix(Rnd(<font color="darkblue"><b>1</b></font>) * (MaxValue + <font color="darkblue"><b>1</b></font>) + MinValue) ArrSum = ArrSum + Arr(i) <font color="blue">Next</font> <font color="#00AA00">'инициализируем карту</font> <font color="blue">For</font> i = <font color="darkblue"><b>2</b></font> <font color="blue">To</font> NumParts Parts(i) = <font color="darkblue"><b>1</b></font> <font color="blue">Next</font> Parts(<font color="darkblue"><b>1</b></font>) = ArrSize - NumParts + <font color="darkblue"><b>1</b></font> BestParts = Parts BestDiff = ArrSum <font color="blue">Do</font> <font color="#00AA00">'ищем минимальную и максимальную сумму части</font> MinPartSum = ArrSum MaxPartSum = <font color="darkblue"><b>0</b></font> j = <font color="darkblue"><b>1</b></font> <font color="blue">For</font> i = <font color="darkblue"><b>1</b></font> <font color="blue">To</font> NumParts PartSum = <font color="darkblue"><b>0</b></font> <font color="blue">For</font> j = j <font color="blue">To</font> j + Parts(i) - <font color="darkblue"><b>1</b></font> PartSum = PartSum + Arr(j) <font color="blue">Next</font> <font color="blue">If</font> MinPartSum > PartSum <font color="blue">Then</font> MinPartSum = PartSum <font color="blue">If</font> MaxPartSum < PartSum <font color="blue">Then</font> MaxPartSum = PartSum <font color="blue">Next</font> <font color="#00AA00">'запоминаем лучшую разницу между минимумом и максимумом</font> <font color="blue">If</font> BestDiff > MaxPartSum - MinPartSum <font color="blue">Then</font> BestDiff = MaxPartSum - MinPartSum BestParts = Parts <font color="blue">End</font> <font color="blue">If</font> <font color="blue">Loop</font> <font color="blue">While</font> NextParts(Parts) <font color="#00AA00">'печать результата</font> Debug.<font color="blue">Print</font> <font color="teal">"Массив:"</font> <font color="blue">For</font> i = <font color="darkblue"><b>1</b></font> <font color="blue">To</font> ArrSize Debug.<font color="blue">Print</font> CStr(Arr(i)) + <font color="teal">" "</font>; <font color="blue">Next</font> Debug.<font color="blue">Print</font> <font color="teal">""</font> Debug.<font color="blue">Print</font> <font color="teal">"Разбивка:"</font> j = <font color="darkblue"><b>1</b></font> <font color="blue">For</font> i = <font color="darkblue"><b>1</b></font> <font color="blue">To</font> NumParts <font color="blue">For</font> j = j <font color="blue">To</font> j + BestParts(i) - <font color="darkblue"><b>1</b></font> Debug.<font color="blue">Print</font> CStr(Arr(j)) + <font color="teal">" "</font>; <font color="blue">Next</font> Debug.<font color="blue">Print</font> <font color="teal">""</font> <font color="blue">Next</font> <font color="blue">End</font> <font color="blue">Sub</font>
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д