记录编号 48757 评测结果 AWWWAWAWWWWWWWW
题目名称 二十一点 最终得分 20
用户昵称 Gravatar亟隐 是否通过 未通过
代码语言 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.