![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() |
collapse |
![]()
Сообщение
#1
|
![]() Группа: Пользователи Сообщений: 3 Репутация: ![]() ![]() ![]() |
задача: есть предприятие. m видов работ, n месяцев. работы неделимы. трудоёмкости у каждой работы соотв-но b[i]. надо более или менее равномерно распределить работы по месяцам так, чтобы максимальная напряженность месяца была минимальной из всех возможных, т.е. max (суммаb[i]) ->min
(сумма b[i] - напряженность какого-то месяца) n>6; m>20 помогите написать прогу. или хотя бы алгоритм. а то меня застопорило.. писать можно но паскали или с++. буду очень признательна. |
![]() ![]() |
trminator |
![]()
Сообщение
#2
|
Четыре квадратика ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 579 Пол: Мужской Репутация: ![]() ![]() ![]() |
Посылаю еще раз, вчера были глюки, не прислалось
Код program workplan; {$APPTYPE CONSOLE} uses SysUtils; const inf = 1000000; //infinity type TVect = array[1..100] of Integer; TPlan = array[-1..100,1..100] of Integer; var works : TVect; plan : TPlan; n, m, i : integer; //n days, m works k,c, avail:integer; //avail works left function argmin: integer; var i, min, nmin: integer; begin min:=inf; for i:=1 to n do if plan[-1, i] < min then begin min:=plan[-1, i]; nmin:=i end; Result:=nmin; end; procedure swap(var a, b: integer); var c: integer; begin c:=a; a:=b; b:=c end; procedure sort(var a: TVect; n: integer); var i, j: integer; begin for i:=1 to n do for j:=n downto i do if a[i] > a[j] then swap(a[i], a[j]); end; procedure input; var i: integer; begin WriteLn('Input number of days > '); ReadLn(n); WriteLn('Input number of works > '); ReadLn(m); for i:=1 to m do begin Write('Input cost for work # ',i,' > '); ReadLn(works[i]) end; end; procedure output; var i, j: integer; begin WriteLn('-------------------------'); for i:=1 to n do begin for j:=1 to plan[0, i] do write(plan[j, i], ' '); writeLn('Total: ', plan[-1, i]) end; end; begin input; avail:=m; sort(works, m); fillchar(plan, sizeof(plan), 0); for i:=1 to m do begin k:=argmin; c:=works[avail]; inc(plan[-1, k],c); inc(plan[0, k]); plan[plan[0,k], k]:=c; dec(avail) end; output; Readln; end. ЗЫ Сдавалась в ПетрГУ, Комбинаторные алгоритмы, Касьянову, на этой неделе. (просто есть подозрение, что эта прога пойдет туда же ![]() -------------------- Закон добровольного труда Зимерги:
Люди всегда согласны сделать работу, когда необходимость в этом уже отпала |
![]() ![]() |
![]() |
Текстовая версия | 26.07.2025 22:13 |