MCARDS - Card Sorting

Tác giả: khuc_tuan

Ngôn ngữ: Pascal

//{$APPTYPE CONSOLE}
 {$MODE DELPHI}

uses
    SysUtils, Math;
    
var
    res, i, n, m : integer;
    f, a, value, color : array[0..400] of integer;

    used : array[1..4] of boolean;
    h : array[1..4] of integer;
    
procedure duyet(pos : integer);
var
    i, j : integer;
begin
    if pos > m then
    begin
        for i:=1 to n * m do
        begin
            for j:=1 to m do if color[i]=h[j] then break;
            a[i] := j * 1000 + value[i];
        end;
        for i:= 1 to n * m do
        begin
            f[i] := 1;
            for j:=1 to i-1 do if (a[j] < a[i]) and (f[j] + 1 > f[i]) then
                f[i] := f[j] + 1;
            if res < f[i] then res := f[i];
        end;
        exit;
    end;
    for i:=1 to m do if not used[i] then
    begin
        h[pos] := i;
        used[i] := true;
        duyet( pos + 1);
        used[i] := false;
    end;
end;

begin
    read(m, n);
    for i:=1 to n * m do
    begin
        read(color[i], value[i]);
    end;
    duyet(1);
    writeln(n*m - res);
end.

Download