描述Description
某趟列车的最大载客容量为V人,沿途共有n个停靠站,其中始发站为第1站,终点站为第n站。
在第1站至第n-1站之间,共有m个团队申请购票搭乘,若规定:
(1)对于某个团队的购票申请,要么全部满足,要么全部拒绝,即不允许只满足部分。(2)每个乘客的搭乘费用为其所乘站数。问:应如何选择这些购票申请,能使该趟列车获得最大的搭乘费用?
其中,每个团队的购票申请格式是以空格分隔的三个整数:a b t,即表示有t个人需要从第a站点乘至第b站点(注:每个团队的所有人员都必须同时在a站上车,且必须同时在后面的b站下车)。
输入格式Input Format
输入有若干行。其中:
第1行只有三个整数n,m,v,分别表示站点数、申请数、列车的最大载客容量。这三个整数之间都以一个空格分隔。
第2行至第m+1行,每行有三个整数,中间都以一个空格分隔。其中第k+1行的三个整数a,b,t表示第k个申请,含义为:有t个人需要从第a站乘至第b站。
其中:1≤n≤10;1≤m≤18
输出格式Output Format
输出只有一行,该行只有一个整数,为该列车能获得的最大搭乘费用。
样例输入Sample Input
33 5
1 2 2
2 3 5
1 3 4
样例输出Sample Output
8
数据规模:
对于所有的数据 1≤n≤10;1≤m≤18
分析:这个题,在vijos上归为了模拟类型,但经多方的调查取证,最终确定……它是DFS!!
代码:
代码
1 program project1;
2 type atype=record
3 start,stop,num,free:integer; //start是起始站,stop是终止站,num是人数,free是费用
4 end;
5 var
6 n,m,v:integer;
7 a:array[1..18]of atype;
8 i,j:integer;
9 ans:longint;
10 st:array[1..10]of integer;
11 op:integer;
12 sign:boolean;
13
14 procedure swap(var a,b:atype); //交换
15 var t:atype;
16 begin
17 t:=a;
18 a:=b;
19 b:=t;
20 end;
21
22 procedure search(k,s:integer);
23 begin
24 if s>ans then ans:=s;
25 if k>m then exit; //搜到最终点
26 sign:=true; //是否可以更新
27 for op:=a[k].start to a[k].stop do
28 if st[op]+a[k].num>v then
29 begin
30 sign:=false; //大于最大的容量,不可以更新
31 break;
32 end;
33 if sign then
34 begin
35 for op:=a[k].start to a[k].stop-1 do
36 st[op]:=st[op]+a[k].num; //加入当前的人数
37 search(k+1,s+a[k].free); //下一层搜索
38 for op:=a[k].start to a[k].stop-1 do
39 st[op]:=st[op]-a[k].num; //回溯
40 end;
41 search(k+1,s); //sign不满足,继续搜索
42 end;
43
44 begin
45 assign(input,'travel.in');
46 reset(input);
47 assign(output,'travel.out');
48 rewrite(output);
49 readln(n,m,v);
50 for i:=1 to m do
51 begin
52 readln(a[i].start,a[i].stop,a[i].num);
53 a[i].free:=(a[i].stop-a[i].start)*a[i].num; //需要拿的票价
54 end;
55 for i:=1 to m-1 do
56 for j:=i+1 to m do
57 if a[i].start>a[j].start then
58 swap(a[i],a[j]); //一个简单的排序
59 fillchar(st,sizeof(st),0);
60 ans:=0;
61 search(1,0);
62 writeln(ans);
63 close(input);
64 close(output);
65 end.
--------------------------代码非原创,但注释原创,注释转载请注明来源JACKERJAY,原代码来源为 “水库”的百度空间--http://hi.baidu.com/jeddite/blog/item/44791838f05ac4f1b211c726.html

浙公网安备 33010602011771号