多米诺骨牌

来源:互联网 发布:java构造方法有几种 编辑:程序博客网 时间:2024/05/16 08:42

多米诺骨牌

Time Limit:10000MS  Memory Limit:65536K
Total Submit:233 Accepted:76
Case Time Limit:1000MS

Description


Input

  输入文件的第一行是一个正整数n(1≤n≤1000),表示多米诺骨牌数。接下来的n行表示n个多米诺骨牌的点数。每行有两个用空格隔开的正整数,表示多米诺骨牌上下方块中的点数a和b,且1≤a,b≤6。

Output

  输出文件仅一行,包含一个整数。表示求得的最小旋转次数。

Sample Input

46 11 51 31 2

Sample Output

Source

elba

 

var i,j,k,k1,k2,n:longint; a,b,f:array[-100000..100000]of longint; function min (a,b:longint):longint;  begin   if a<b then exit(a);   exit(b);  end;   function max (a,b:longint):longint;  begin   if a<b then exit(b);   exit(a);  end; procedure init;  var   i:longint;  begin   read(n);   for i:=1 to n do    begin     readln(a[i],b[i]);     k1:=k1+a[i];     k2:=k2+b[i];     k:=k+max(a[i],b[i]);    end;  end; procedure work;  begin   fillchar(f,sizeof(f),100);   f[k1-k2]:=0;   for i:=1 to n do begin                     if a[i]>b[i] then  for j:=-k to k do  f[j]:=min(f[j],f[j+2*(a[i]-b[i])]+1);                     if a[i]<b[i] then  for j:=k downto -k do  f[j]:=min(f[j],f[j+2*(a[i]-b[i])]+1);                    end;   for i:=0 to k do begin                       if f[i]<>f[-10000] then break;                       if f[-i]<>f[-10000] then break;                      end;                writeln(min(f[i],f[-i]));  end;begin init; work;end.

 

0 0
原创粉丝点击