你要进行一个行程为7000KM的旅行,现在沿途有些汽车旅馆,为了安全起见,每天晚上都不开车,住在汽车旅馆,你手里现在已经有一个旅馆列表,用离起点的距离来标识,如下:
0, 990, 1010, 1970, 2030, 2940, 3060, 3930, 4060, 4970, 5030, 5990, 6010, 7000
但在出发之前可能还要增加一些旅馆。
现在旅行社为了节约成本要求每天至少行驶A公里,国家旅行社为了安全起见要求每天最多只能行驶B公里。
你想知道一共有多少种旅行方案。
题解:
把旅馆记录后排序,搜索。~~
代码:
var
a:array[1..40] of longint;
n,m,l,ans:longint;
procedure init;
var
i,j,t:longint;
begin
fillchar(a,sizeof(a),$7f);
a[1]:=0;
a[2]:=990;
a[3]:=1010;
a[4]:=1970;
a[5]:=2030;
a[6]:=2940;
a[7]:=3060;
a[8]:=3930;
a[9]:=4060;
a[10]:=4970;
a[11]:=5030;
a[12]:=5990;
a[13]:=6010;
a[14]:=7000;
readln(n);
readln(m);
readln(l);
for i:=1 to l do
readln(a[i+14]);
l:=l+14;
for i:=1 to l-1 do
for j:=i+1 to l do
if a[i]>a[j] then
begin t:=a[i];a[i]:=a[j];a[j]:=t;end;
end;
procedure dfs(x:longint);
var
i:longint;
begin
if x=l then
begin
inc(ans);
exit;
end;
for i:=x+1 to l do
begin
if (a[x]+n<=a[i])and(a[x]+m>=a[i]) then
dfs(i);
if a[x]+m<a[i] then exit;
end;
end;
var
i:longint;
begin
init;
dfs(1);
writeln(ans);
end.