多米诺骨牌
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
1
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.
1526

被折叠的 条评论
为什么被折叠?



