题目描述
你要进行一个行程为7000KM的旅行,现在沿途有些汽车旅馆,为了安全起见,每天晚上都不开车,住在汽车旅馆,你手里现在已经有一个旅馆列表,用离起点的距离来标识,如下:
0, 990, 1010, 1970, 2030, 2940, 3060, 3930, 4060, 4970, 5030, 5990, 6010, 7000
但在出发之前可能还要增加一些旅馆。
现在旅行社为了节约成本要求每天至少行驶A公里,国家旅行社为了安全起见要求每天最多只能行驶B公里。
你想知道一共有多少种旅行方案。
输入
第一行输入A,第二行输入B,第三行输入N(0<=N<=20),表示在出发之前又新增N个汽车旅馆,接下来N行,每行一个整数m,表示旅馆离起点的距离(0
输出
输出一共有多少种旅行方案。
我用了搜索,就是找每一次可以走到的点,走到终点就加一
var f,o:array[0..10000] of longint; i,j,k,n,m,s,a,b,x,y:longint; procedure dfs(x:longint); var i,j,k:longint; begin if x=y then begin inc(s); exit; end; for i:=x+1 to y do if (f[i]-f[x]<=b) and (f[i]-f[x]>=a) then dfs(i); end; begin f[1]:=990; f[2]:=1010; f[3]:=1970; f[4]:=2030; f[5]:=2940; f[6]:=3060; f[7]:=3930; f[8]:=4060; f[9]:=4970; f[10]:=5030; f[11]:=5990; f[12]:=6010; f[13]:=7000; readln(a); readln(b); readln(n); for i:=1 to n do begin readln(x); f[13+i]:=x; end; y:=13+n; for j:=1 to y do for k:=1 to y-1 do begin if f[k]>f[k+1] then begin x:=f[k]; f[k]:=f[k+1]; f[k+1]:=x; end; end; dfs(0); writeln(s); end.
]]>
Comments NOTHING