Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.10.2013, 17:41   #1
FoX1488
Новичок
Джуниор
 
Регистрация: 07.10.2013
Сообщений: 6
Восклицание Задача "Роман в томах"


Нужно решить эту задачу до завтрашнего обеда.
Кто нибудь, помогите.
Отблагодарю щедро!
FoX1488 вне форума Ответить с цитированием
Старый 07.10.2013, 21:09   #2
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

В голову приходит лишь перебор..
Poma][a вне форума Ответить с цитированием
Старый 07.10.2013, 22:09   #3
ViktorR
Старожил
 
Регистрация: 23.10.2010
Сообщений: 2,311
По умолчанию

Как вариант:
1. Суммируем все страницы и делим на число томов.
Получаем среднее значение числа страниц на том - с округлением до целого.
2. Просматриваем главы по порядку, суммируя страницы - выполняем проверку найденного решения.
Если набрали некоторое число страниц такое, что следующая глава помещяется только на половину или менее (среднее число страниц не превышено), то переходим к формированию следующего тома.
3. Для следующего тома допускаем превышение среднего числа страниц - но только если число непоместившихся страниц следующей главы менее половины.
Так, поочередно, не превышая, а затем превышая среднее число страниц формируем К томов.

Возможно, что алгоритм надо доработать, но я бы как-то так пошел ...

PS: Еще один критерий - среднее число глав в томе. Но это слабый показатель.


Как-то так, ...
Как-то так, ...

Последний раз редактировалось ViktorR; 07.10.2013 в 22:26.
ViktorR вне форума Ответить с цитированием
Старый 07.10.2013, 22:18   #4
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

Угу.. Можно придумать что-то с динамикой.. Решение для i-той главы, это min (решение[i-1], решение[i-2]) + кол-во страниц в i-том.. (Наверное)..
Poma][a вне форума Ответить с цитированием
Старый 08.10.2013, 00:00   #5
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Простым перебором просто решается, но ACMP.RU отфутболил по времени

А если так:
Код:
n - к-во глав
k - к-во томов
S(n,k) - min размер самого большого тома
S(n,1)=A[1]+A[2]+...+A[n]
S(i,i)=max(A[1],A[2],...,A[i])
S(n,k)=min(max(S(n-1,k-1), A[n]),
           max(S(n-2,k-1), A[n-1]+A[n]),
           max(S(n-3,k-1), A[n-2]+A[n-1]+A[n]),
           ...
           max(S(k-1,k-1), A[k]+A[k+1]+...+A[n-1]+A[n]))
Если чего не напутал. Ромахе на засыпку Спать хоца
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 08.10.2013, 18:19   #6
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

Цитата:
ACMP.RU отфутболил по времени
А можно код?
Цитата:
Ромахе на засыпку
Кстати, очень похоже на правду.. (проверить времени нет)..
Poma][a вне форума Ответить с цитированием
Старый 08.10.2013, 20:52   #7
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Могу и выложить.
1-ый код перебором - по времени не прошел.
2-ой код все тесты прошел, но длина его не фонтан по сравнению с другими участниками
Код:
program Project1;

{$APPTYPE CONSOLE}

var n,i,k: Word;
    a: array [1..100] of Word;

procedure X(d,c,e: Word);
var m,s,t: Word;
begin
  t:=e; s:=0;
  for m:=1 to n-c-k+d do begin
    Inc(s,a[c+m]);
    if s>t then t:=s;
    if d<k then X(d+1,c+m,t)
  end;
  if (d=k) and (i>t) then i:=t
end;

begin
  Reset(input,'input.txt');
  Read(n);
  for i:=1 to n do Read(a[i]);
  Read(k);
  i:=32767;
  X(1,0,0);
  Assign(output,'output.txt');
  Write(i)
end.
Код:
program Project1;

{$APPTYPE CONSOLE}

var g,t,i,j,k,u,v,x: Word;
    a,b,d: array[1..100] of Word;

begin
  Reset(input,'input.txt');
  Read(g);
  for i:=1 to g do begin
    Read(a[i]);
    b[i]:=a[i];
    if i>1 then b[i]:=b[i]+b[i-1]
  end;
  Read(t);
  for i:=2 to t do begin
    for j:=i to g do begin
      u:=0;
      x:=65535;
      for k:=1 to j-i+1 do begin
        u:=u+a[j-k+1];
        v:=b[j-k];
        if u>v then v:=u;
        if x>v then x:=v
      end;
      d[j]:=x
    end;
    b:=d
  end;
  Assign(output,'output.txt');
  Write(b[g])
end.
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 08.10.2013, 21:22   #8
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

Так нечестно!!!
Я лишь просил код перебора А тут.. Эх.. "А задача хорошая, и теперь уже мозги не почистишь, память не сотрешь, свой hard drive в башке не переформатируешь.." (c) TinMan
Poma][a вне форума Ответить с цитированием
Старый 08.10.2013, 21:25   #9
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Ромаха, у меня там длина кода за 400. Побей их всех, сделай конфетку. Или другой алгоритм
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 08.10.2013, 21:38   #10
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

Цитата:
Ромаха, у меня там длина кода за 400. Побей их всех, сделай конфетку. Или другой алгоритм
Но время-время-времечко..
И можно шушуть пояснить алгоритм.. я до конца не понимаю..
Poma][a вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Создать класс "Фигура", от него наследованием создать 3 класса ("треугольник", "четырехугольник", "окружность") funnyy Помощь студентам 3 17.10.2012 17:40
Вывести название соответствующей карты вида "шестерка бубен", "дама червей","туз треф" и т.п. воваава Помощь студентам 3 01.12.2011 12:50
при вводе на листе "магазин"- код товара появлялось "описание" товара из "склада" с "продажной ценой" aleksei78 Microsoft Office Excel 13 25.08.2009 12:04
"Транспортная задача", "Поиск решения" Perroman Microsoft Office Excel 3 12.12.2007 17:12