【2012.03.09普及组】旅行 (Standard IO)

题目描述
你要进行一个行程为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.

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值