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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 08.12.2009, 21:14   #1
k1r1ch
ACM!
Форумчанин
 
Аватар для k1r1ch
 
Регистрация: 19.06.2009
Сообщений: 382
Вопрос Задача "Сдача"

В очередной раз прошу о помощи, так как не могу сдать задачу №407.
Выдает Wrong Answer на 11 тесте. Но я не могу найти ошибку, какие бы данные не вводил!
Код:
program ACMP_407;
const Max = 1000000000;
var
  N, V, i: longint;
  A: array [1..10] of longint;

function Min(A, B: longint): longint;
begin
  if A < B then Min := A else Min := B;
end;

function CalcChange(V: longint): longint;
var Minimal, i: longint;
begin
  Minimal := 0;
  if V <> 0 then
    begin
      Minimal := Max;
        for i := 1 to N do
  	  if V >= A[i] then
  	    Minimal := Min(CalcChange(V mod A[i]) + V div A[i], Minimal);
    end;
  CalcChange := Minimal;
end;	

begin
  Assign(Input, 'Input.txt'); Assign(Output, 'Output.txt');
  Reset(Input); Rewrite(Output);
  Read(N);
  for i := 1 to N do Read(A[i]);
  Read(V);
  V := CalcChange(V);
  if V >= Max then Write('-1') else Write(V);
end.
Да, и еще вопрос. Пока не было TLE, но вдруг будет. Можно ли как-то рассчитать, уложится ли решение в секунду, надо ли применять динамику или перебор пройдет?
k1r1ch вне форума Ответить с цитированием
Старый 09.12.2009, 15:15   #2
LeBron
Форумчанин
 
Регистрация: 10.10.2009
Сообщений: 680
По умолчанию

Советую переписать этот рекурсивный бред на нормальное (линейное) решение. Рассчитать - посмотреть на сложность алгоритма и ограничения, асимптотика если есть - то просто примерно посчитать количество операций.
З.Ы. нормальное решение - это решение через динамику. Асимптотика - асимптотическая оценка для функции f(x), которая определяет количество вычислений при данных ограничениях.

Последний раз редактировалось LeBron; 09.12.2009 в 15:21.
LeBron вне форума Ответить с цитированием
Старый 30.03.2014, 15:32   #3
kostan3
- Дорогой, а ты ку
Форумчанин
 
Регистрация: 06.10.2012
Сообщений: 181
По умолчанию

Код:
const inf = 1000000000;
  MAXP = 1000000;

type
  int = longint;

var
  ans: array [0..MAXP] of int;
  x: array [1..10] of int;
  n, k, i, j: int;

begin
  reset(input,'input.txt');
  rewrite(output,'output.txt');

  read(n);
  assert((1 <= n) and (n <= 10));
  for i:=1 to n do
  begin
    read(x[i]);
    assert((1 <= x[i]) and (x[i] <= 2000));
  end;

  read(k);
  assert((1 <= k) and (k <= 1000000));
  for i:=1 to k do
  begin
    ans[i]:=inf;
    for j:=1 to n do
      if (i >= x[j]) and (ans[i - x[j]] + 1 < ans[i]) then
        ans[i]:=ans[i - x[j]] + 1;
  end;

  if (ans[k] >= inf) then
  begin
    writeln(-1);
    exit;
  end;
  writeln(ans[k]);
end.
kostan3 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
при вводе на листе "магазин"- код товара появлялось "описание" товара из "склада" с "продажной ценой" aleksei78 Microsoft Office Excel 13 25.08.2009 12:04
блок "cont" с права не принимает значение "margin: 10px;" которое описано в body tabikA HTML и CSS 5 24.02.2009 21:50
Под прикрытием "кризиса" наши доблестные "управители" хотят утопить нас в радиоактивных отходах mihali4 Свободное общение 1 17.01.2009 01:43
если пользователь наберет какой-то другой символ не "y" или "n" и нажмет enter, программа проигнорирует skobets Общие вопросы C/C++ 2 03.06.2008 06:51
"Транспортная задача", "Поиск решения" Perroman Microsoft Office Excel 3 12.12.2007 17:12