SPBINARY - Xâu Nhị Phân

Tác giả: ll931110

Ngôn ngữ: Pascal

{$MODE DELPHI}
program SPBINARY;
const
  input  = '';
  output = '';
  maxn = 600;
  maxd = 23;
  base = 1000000000;
type
  arr = array[1..maxd] of integer;
var
  a: array[1..maxn,1..maxn] of arr;
  res: arr;
  n,k: integer;

procedure init;
var
  f: text;
begin
  assign(f, input);
    reset(f);
	readln(f, n, k);
  close(f);
end;

procedure add(var x,y: arr);
var
  i: integer;
begin
  for i := 1 to maxd - 1 do
    begin
      x[i] := x[i] + y[i];
      if x[i] > base then
        begin
          inc(x[i + 1]);
          x[i] := x[i] - base;
        end;
    end;
end;

procedure dp;
var
  i,j: integer;
begin
  fillchar(a, sizeof(a), 0);
  a[1,1,1] := 2;

  for i := 2 to n do
    begin
      for j := 1 to i do add(a[i,1],a[i - 1,j]);
      for j := 2 to k do a[i,j] := a[i - 1,j - 1];
    end;
end;

procedure printresult;
var
  f: text;
  i,j,d: integer;
  s: string;
begin
  assign(f, output);
    rewrite(f);

  fillchar(res, sizeof(res), 0);
  for i := 1 to k do add(res,a[n,i]);

  d := maxd;
  while res[d] = 0 do dec(d);

  write(f, res[d]);
  for i := d - 1 downto 1 do
    begin
      str(res[i],s);
      for j := 1 to 9 - length(s) do write(f, 0);
      write(f, s);
    end;

  close(f);
end;

begin
  init;
  dp;
  printresult;
end.

Download