多米诺骨牌

多米诺骨牌

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

4						
6 1
1 5
1 3
1 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.


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值