PisntD

 

Trap

Description

小A成功地在紧要关头逃离了神奇山洞,同时他也感觉自己rp大增。现在他站在了一座阴森森的城堡前,这就是江湖人称“死亡城堡”的魔域。为了rp,小A毅然决然地走了进去…… 
不愧是死亡城堡,险境丛生,小A又是一个大意的人,XXX他掉进了一个陷阱。 
这是一个n*n的矩阵陷阱,矩阵的每一个小格内都有一个魔鬼,并且这些魔鬼属于不同的种类,种类数不超过p(1<=p<=n*n,有可能存在某一种魔鬼不在矩阵中出现)。每一种魔鬼i都有一种战斗力c[i],不同的魔鬼战斗力不同。打魔鬼也不是那么好玩的,需要消耗小A相应数量的战斗力。当小A打败了一个魔鬼后,此种类型的魔鬼就会全部消失,这样小A就可以自由的在这种类型的格子间传送,不会消耗任何的战斗力。每到一个格子,小A可以向紧邻的上下左右四个格子进发去打魔鬼,直到走出矩阵。小A开始郁闷了,他怎样才能从矩阵的第一行出发,顺利的走到矩阵的最后一行呢?所谓的顺利,就是使自己的战斗力大于0。 
现在小A求助于聪明的你,希望你能求出小A顺利走出陷阱时剩余的最大战斗力。 

Input

第一行:两个整数n,p; 
第2到n+1行是一个n*n的矩阵,矩阵中不同的数字代表不同的格子类型; 
第n+2行是p个数,代表p种魔鬼的战斗力; 
最后一行:小A的初始战斗力值W。 

Output

一个整数表示小A顺利走出陷阱时剩余的最大战斗力,如果小A走不出陷阱就输出'Dangerous!';
3 3
1 2 1
2 1 2
1 1 1
1 2 5
7

3 3
1 2 1
2 1 2
3 3 3
1 2 5
2

 

6

Dangerous!

 

1 type
2 arr=array[0..30000] of longint;
3  var
4 fz:arr;
5 n,i,la,a,b,c:longint;
6 l:array[0..2] of longint;
7 f:array[0..2] of arr;
8  procedure down(a,b:longint);
9  begin
10 writeln(b);
11 writeln(a);
12 close(input);
13 close(output);
14 halt;
15 end;
16 procedure prt(a:arr;l:longint);
17 var
18 i:longint;
19 begin
20 write(a[l]);
21 for i:=l-1 downto 1 do
22 begin
23 if a[i]<10 then write('000',a[i])
24 else if a[i]<100 then write('00',a[i])
25 else if a[i]<1000 then write('0',a[i])
26 else write(a[i]);
27 end;
28 writeln;
29 end;
30 procedure add(l1:longint;var l3:longint;var a,b,c:arr);
31 var
32 i,x:longint;
33 begin
34 i:=1;
35 x:=0;
36 while (i<=l1) do
37 begin
38 x:=a[i]+b[i]+x div 10000;
39 c[i]:=x mod 10000;
40 inc(i);
41 end;
42 c[i]:=x div 10000;
43 if c[i]>0 then l3:=l1+1
44 else l3:=l1;
45 end;
46 begin
47 readln(n);
48 f[0][1]:=1;
49 l[0]:=1;
50 f[1][1]:=2;
51 l[1]:=1;
52 a:=0;
53 b:=1;
54 c:=2;
55 if n=1 then down(0,1);
56 if n=2 then down(1,4);
57 for i:=2 to n-3 do
58 begin
59 add(l[b],l[c],f[a],f[b],f[c]);
60 a:=(a+1) mod 3;
61 b:=(b+1) mod 3;
62 c:=(c+1) mod 3;
63 end;
64 for i:=1 to l[b] do
65 fz[i]:=f[b][i];
66 la:=l[b];
67 f[0][1]:=2;
68 l[0]:=1;
69 a:=0;
70 b:=1;
71 for i:=2 to n do
72 begin
73 add(l[a],l[b],f[a],f[a],f[b]);
74 a:=ord(odd(a+1));
75 b:=ord(odd(b+1));
76 end;
77 prt(f[a],l[a]);
78 prt(fz,la);
79 end.

 

posted on 2010-11-17 13:36  PisntD  阅读(176)  评论(0)    收藏  举报

导航