如果发现广告等破坏行为,请尽量将条目恢复到较早的版本而不是把相应内容直接删除,谢谢合作。

URAL/1087

来自"NOCOW"

跳转到: 导航, 搜索

递推 设f[i]表示剩下i个石子时第一个人是否有必胜策略

program t1087; 
var
  k:array [0..10001] of longint;
  f:array [0..10001] of boolean;
  n,m,i,j:longint;
begin
 readln(n,m);
 for i:=1 to m  do read(k[i]);
 f[0]:=true;
 for i:=1 to n do
 begin
   f[i]:=false;
   for j:=1 to m do
   if i>=k[j] then
   if not f[i-k[j]] then
   begin
     f[i]:=true;
     break;
   end;
  end;
  if f[n] then
  writeln(1)
  else
  writeln(2);
end.

顺推 直到n为止.

program cyd;
  var
    s:array[1..100]of longint;
    v:array[1..20000]of integer;
    i,j,k,l,m,n,a,b,c:longint;
  procedure print(x:integer);
    begin
      writeln(x);
      halt;
    end;
  begin
    readln(n,m);
    for i:=1 to m do
      read(s[i]);
    v[1]:=2;
    j:=1;
    repeat
      while v[j]=1 do inc(j);
      if j=n then print(2);
      for i:=1 to m do
        if j+s[i]<n then v[j+s[i]]:=1
        else if j+s[i]=n then print(1);
      inc(j);
      until false;
  end.
个人工具