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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 27.02.2010, 13:42   #11
p1r2o3
Пользователь
 
Регистрация: 09.12.2009
Сообщений: 20
По умолчанию

это та же задачка.. ну.. я тож динамику использовала просто время не соответсвует

Цитата:
Сообщение от LeBron Посмотреть сообщение

Задачка откуда? И важен ли порядок чисел в разбиении? Если нет - детски простая динамика пишется легко и точно проходит (взгляните на задачу 1017 на Тимусе, я использовал там именно такую динамику, ограничения по времени 1 секунда, по памяти 16 мб, проходит, у меня
1017 C++ Accepted
0.078 2 813 КБ
).
Если да - надо подумать над более красивым решением, можно просунуть и такое, но его надо будет дописать и доделать в ущерб красоте и простоте.
Да Из Тимуса.. Нет не идет же.. По времени... Или я что-то не то пишу... Как там вы написали?

Последний раз редактировалось Stilet; 16.03.2010 в 08:03.
p1r2o3 вне форума Ответить с цитированием
Старый 28.02.2010, 16:53   #12
LeBron
Форумчанин
 
Регистрация: 10.10.2009
Сообщений: 680
По умолчанию

Цитата:
Сообщение от p1r2o3 Посмотреть сообщение
Да Из Тимуса.. Нет не идет же.. По времени... Или я что-то не то пишу... Как там вы написали?
В силу моего скотства и врожденной недоверчивости - не скажу. Давайту лучше так - Вы киньте свой код, и исправлять будем его Я пока ни кода, ни конкретных идей не услышал.
LeBron вне форума Ответить с цитированием
Старый 28.02.2010, 22:05   #13
p1r2o3
Пользователь
 
Регистрация: 09.12.2009
Сообщений: 20
По умолчанию

Так даже лучше)))
Вот мой код(((
Код:
var
n,i,k,l:longint;
function f(var n:longint; var k:longint):longint;
var  m,p:longint;
begin
 if (n<0) or (k<0) then
 f:=0
 else
 if (n=1) and (k>=1) then
  f:=1
 else
 if (k=1) and (n>1) then
  f:=0
 else
 if n=0 then
  f:=1
 else
 begin
 p:=k-1; m:=n-k;
 f:=f(n,p)+f(m,p);
 end;

end;

begin
readln(n);
  l:=f(n,n);
 writeln(l-1);
end.

Последний раз редактировалось Stilet; 16.03.2010 в 08:03.
p1r2o3 вне форума Ответить с цитированием
Старый 28.02.2010, 23:19   #14
LeBron
Форумчанин
 
Регистрация: 10.10.2009
Сообщений: 680
По умолчанию

Цитата:
Сообщение от p1r2o3 Посмотреть сообщение
Так даже лучше)))
Вот мой код(((
Заведите массив и заполните его в цыкле (динамика от меньших значений к бОльшим), избавтесь от такой глупости в стиле горе-учителей, как рекурсия.
Она дает Вам примерно 150кратный проигрыш по времени.
LeBron вне форума Ответить с цитированием
Старый 28.02.2010, 23:42   #15
p1r2o3
Пользователь
 
Регистрация: 09.12.2009
Сообщений: 20
По умолчанию

А с массивом тоже ведь не получается.
Код:
var n,i,k,l,j:longint;
    d:array[0..500, 0..500] of longint;
function f(var n:longint; var k:longint):longint;
  var  m,p:longint;
begin
 if d[n,k]=-3 then
  if (n<0) or (k<0) then d[n,k]:=0 else
  if (n=1) and (k>=1) then d[n,k]:=1  else
  if (k=1) and (n>1) then d[n,k]:=0 else
 if n=0 then d[n,k]:=1  else
 begin
  p:=k-1; m:=n-k;
  d[n,k]:=f(n,p)+f(m,p);
 end;
 f:=d[n,k];
end;

begin
for i:=0 to 500 do
for j:=0 to 500 do
d[i,j]:=-3;
readln(n);
  l:=f(n,n);
 writeln(l-1);
end.
проигрыш по памяти((

Последний раз редактировалось Stilet; 16.03.2010 в 08:06.
p1r2o3 вне форума Ответить с цитированием
Старый 28.02.2010, 23:55   #16
NiCola999
Не
Участник клуба
 
Регистрация: 29.10.2009
Сообщений: 1,456
По умолчанию

я не очень понимаю че вы тут делаете) , но одно могу подсказать, задача на разбиение числа на слагаемые похожа на задачу о размене монет жадным алгоритмом и решается в несколько строк
NiCola999 вне форума Ответить с цитированием
Старый 01.03.2010, 18:38   #17
p1r2o3
Пользователь
 
Регистрация: 09.12.2009
Сообщений: 20
По умолчанию

Цитата:
Сообщение от NiCola999 Посмотреть сообщение
я не очень понимаю че вы тут делаете) , но одно могу подсказать, задача на разбиение числа на слагаемые похожа на задачу о размене монет жадным алгоритмом и решается в несколько строк
В том что она похожа на задачку о размене монет вы правы(я полностью с этим солидарна) а вот то, что она решается в несколько строк вызывает сомнения.

Код:
var 
  a:array[2..10, 1..10] of integer;
  n,k,i,j:integer;
begin
  readln(n);
  k:=2;  
  a[2,1]:=1;
   while k<=n-1 do
     begin
       inc(k);
       a[k,k-1]:=1;
        i:=k-2;
        for j:=1 to k div 2 do
          a[k,k-j]:=1;
        i:=k-j-1;

       while i>=1 do
         begin
           a[k,i]:=a[k,i+1]+a[k-1,i+1];
           dec(i);
         end;
     end;

writeln(a[n,1]);
end.
Ладно, без рекурсии так без рекурсии, а тогда с этой программкой че не то не подскажете?

Последний раз редактировалось Stilet; 16.03.2010 в 08:07.
p1r2o3 вне форума Ответить с цитированием
Старый 01.03.2010, 23:04   #18
LeBron
Форумчанин
 
Регистрация: 10.10.2009
Сообщений: 680
По умолчанию

Нда... Времени и желания что-то объяснять нету, так как после запрета рекурсии писать рекурсию еще раз... У меня сейчас отбор как раз, и время тратить на такое неохота. Если появится много лишнего времени - посмотрю на Ваш код и попробую поймать идею. А пока - в награждение за попытки ловите мой АС:
Код:
#include <iostream>
#include <math.h>
using namespace std;long long ar[700][700];long long i,q,j,a,ans;
int main(){
cin>>a;
for (i=1;i<=a-1;i++){ar[a-i][i]=1;}
for (i=a-1;i>=1;i--){for(j=1;j<=a-i;j++){for(q=j+1;q<=i;q++){ar[i-q][q]=ar[i-q][q]+ar[i][j];};};}
for(i=1;i<=a;i++){ans+=ar[0][i];}cout<<ans;
return 0;}
Все символ в символ без любых изменений, разбирайтесь. Не поймете - задавайте вопросы, буду завтра (надеюсь) и отвечу.
LeBron вне форума Ответить с цитированием
Старый 11.03.2010, 20:31   #19
p1r2o3
Пользователь
 
Регистрация: 09.12.2009
Сообщений: 20
По умолчанию

а если скажу , что ничего не поняла.?
p1r2o3 вне форума Ответить с цитированием
Старый 12.03.2010, 14:09   #20
LeBron
Форумчанин
 
Регистрация: 10.10.2009
Сообщений: 680
По умолчанию

Цитата:
Сообщение от p1r2o3 Посмотреть сообщение
а если скажу , что ничего не поняла.?
Мне то что, говорите, если хотите. Если совсем ничего - то не уверен, что смогу помочь. Можете для себя "отформатировать" и еще раз прочесть... Не помогло?.. Я не виноват

После считывания числа - 3 строки решения
Первая строка - заполняю базу динамики.
Вторая - заполняю динамический массив (фактически, эта строка - и есть все решение).
Третяя - подсчитываю ответ по готовой динтаблице.
LeBron вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Разбиение на колонки zenner Microsoft Office Excel 13 05.10.2009 09:31
Разбиение записей Лубышев Microsoft Office Access 0 17.03.2009 08:27
Все возможные слагаемые anGeee Паскаль, Turbo Pascal, PascalABC.NET 4 04.12.2008 20:22
Разбиение на части MAcK Общие вопросы .NET 4 18.09.2008 13:56
Разложение числа на слагаемые Oleg-vp Общие вопросы Delphi 5 30.10.2007 10:43