记录编号 |
48757 |
评测结果 |
AWWWAWAWWWWWWWW |
题目名称 |
二十一点 |
最终得分 |
20 |
用户昵称 |
亟隐 |
是否通过 |
未通过 |
代码语言 |
Pascal |
运行时间 |
0.490 s |
提交时间 |
2012-11-06 15:23:37 |
内存使用 |
0.18 MiB |
显示代码纯文本
var f,a,f1:array[-10..1100]of longint;
n,i,j,x,y,k:longint;
procedure init;
begin
readln(n);
for i:=1 to n do read(a[i]);
for i:=1 to n do f[i]:=-100000000;
end;
function try(x,y,l,r,k,b,b2:longint):boolean;
begin
if l>r then
begin
if f[i]<-1000000 then f[i]:=0;
if (x<=16)and(r<>n) then exit(false);
if x>=y then exit(false) else exit(true);
end;
if (x>21)or(y>21) then exit(false);
if (b=0)and(b2=0) then exit(false);
if k=0 then
begin
if (b=1)and(x<=16) then if try(x+a[l],y,l+1,r,1-k,b,b2) then exit(true);
exit(try(x,y,l,r,1-k,0,b2));
end else
begin
if b2=1 then if try(x,y+a[l],l+1,r,1-k,b,b2) then exit(true);
exit(try(x,y,l,r,1-k,b,0));
end;
exit(false);
end;
function deal(l,r:longint):boolean;
begin
x:=a[l]+a[l+2]; y:=a[l+1]+a[l+3];
l:=l+4;
exit(try(x,y,l,r,0,1,1));
end;
procedure work;
begin
for i:=4 to n do
begin
for j:=0 to i-6 do
begin
if f[j]+1>f[i] then if deal(j+1,i) then f[i]:=f[j]+1;
if (f[i]<-10000000)and(f[j]>=0) then deal(j+1,i);
f1[i]:=f[i];
end;
for j:=i-5 to i-4 do if j>-1 then
begin
if f[j]+1>f[i] then if deal(j+1,i) then f[i]:=f[j]+1;
if (f[i]<-10000000)and(f[j]>=0) then deal(j+1,i);
end;
end;
x:=0;
for i:=1 to n do if f1[i]>x then x:=f1[i];
writeln(x);
end;
begin
assign(input,'jack.in');reset(input);
assign(output,'jack.out');rewrite(output);
init;
work;
close(input);close(output);
end.