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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 04.04.2014, 17:13   #1
kostan3
- Дорогой, а ты ку
Форумчанин
 
Регистрация: 06.10.2012
Сообщений: 181
По умолчанию перевод на с++ с paskal

перевести код на с++ плиз!
Код:
const
  i2= 1000000000;
 
var
  p, a, b, k: array[1..1000] of integer;
  z: array[1..1000] of boolean;
  d, e: array[0..1000, 0..1000] of integer;
 
procedure fi(i, j, m: integer);
begin
  assert(j <= i);
  if j = 0 then exit;
  if (e[i, j] = 1) then begin
    fi(i - 1, j, m);
  end else begin
    fi(i - 1, j - 1, m - 1);
    p[m] := k[i];
  end;
end;
 
var
  n, m, l, i, j, t, aa, d1, d2: integer;
 
begin
   
  reset (input, 'input.txt');
  assign (output, 'output.txt');
  read(n, aa);
  for i := 1 to n do read(a[i], b[i]);
 
  m := 0;
 
  for i := 1 to n do begin
    for j := 1 to n do if (b[j] >= 0) and (a[j] <= aa) and not z[j] then begin
      z[j] := true;
      inc(m);
      p[m] := j;
      aa := aa + b[j];
    end;
  end;
 
  l := 0;
  for i := 1 to n do if b[i] < 0 then begin
    inc(l);
    a[l] := a[i];
    b[l] := b[i];
    k[l] := i;
  end;
 
  for i := 1 to l do
    for j := i + 1 to l do begin
      if (a[j] + b[j] > a[i] + b[i]) then begin
        t := a[i];
        a[i] := a[j];
        a[j] := t;
        t := b[i];
        b[i] := b[j];
        b[j] := t;
        t := k[i];
        k[i] := k[j];
        k[j] := t;
      end;
    end;
 
  d[0, 0] := aa;
  for i := 1 to l do d[0, i] := -i2;
 
  for i := 1 to l do
    for j := 0 to l do begin
      d1 := d[i - 1, j];
      if (j = 0) or (a[i] > d[i - 1, j - 1]) then
        d2 := -i2
      else
        d2 := d[i - 1, j - 1] + b[i];
      if (d1 >= d2) then begin
        d[i, j] := d1;
        e[i, j] := 1;
      end else begin
        d[i, j] := d2;
        e[i, j] := 2;
      end;
    end;
 
  j := 0;
  while (j < l) and (d[l, j + 1] > -i2) do inc(j);
 
  m := m + j;
 
  fi(l, j, m);
 
  writeln(m);
  for i := 1 to m do write(p[i], ' ')
 
end.

Последний раз редактировалось kostan3; 04.04.2014 в 17:17.
kostan3 вне форума Ответить с цитированием
Старый 06.04.2014, 15:57   #2
Physist_Minsk
 
Регистрация: 06.04.2014
Сообщений: 4
По умолчанию

Напиши словами, в чём соль проги.
Physist_Minsk вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перевод из Basic в Paskal Gehenna Помощь студентам 4 20.11.2013 11:57
Paskal qscwdv Помощь студентам 0 08.02.2012 11:05
paskal abc,turbo paskal andrei57 Паскаль, Turbo Pascal, PascalABC.NET 3 08.09.2011 05:33
Free Paskal и Turbo Paskal Polly~Sunbeam Паскаль, Turbo Pascal, PascalABC.NET 7 18.04.2011 16:00
paskal nolx Паскаль, Turbo Pascal, PascalABC.NET 0 10.12.2010 15:40