题解:很萌的博弈论问题。。。但是我还是在读题上逗比了N次——第一次我以为每次可以减去 1-最大的位数 ;第二次我以为可以减去 最小的位数-最大的位数 ;直到第三次才发现只可以减去最大位数和最小位数。。。别的没了,博弈论经典算法AC之
1 /**************************************************************
2 Problem: 3404
3 User: HansBug
4 Language: Pascal
5 Result: Accepted
6 Time:2804 ms
7 Memory:9992 kb
8 ****************************************************************/
9
10 var
11 i,j,k,l,m,n,t:longint;
12 a:array[0..1000005,1..2] of boolean;
13 b:array[0..1000005,1..2] of longint;
14 function max(x,y:longint):longint;
15 begin
16 if x>y then max:=x else max:=y;
17 end;
18 function min(x,y:longint):longint;
19 begin
20 if x<y then min:=x else min:=y;
21 end;
22 begin
23 a[0,1]:=false;a[0,2]:=true;
24 for i:=1 to 1000000 do
25 begin
26 j:=i;k:=1;t:=9;
27 while j>0 do
28 begin
29 k:=max(k,j mod 10);
30 if (j mod 10)>0 then t:=min(t,j mod 10);
31 j:=j div 10;
32 end;
33 a[i,1]:=false;
34 if a[i-t,2] then a[i,1]:=true;
35 if a[i-k,2] then a[i,1]:=true;
36 a[i,2]:=true;
37 if not(a[i-t,1]) then a[i,2]:=false;
38 if not(a[i-k,1]) then a[i,2]:=false;
39 end;
40 readln(n);
41 for i:=1 to n do
42 begin
43 readln(m);
44 if a[m,1] then writeln(‘YES‘) else writeln(‘NO‘);
45 end;
46 readln;
47 end.