Pascal程序笔迹:steve挖矿

来源:互联网 发布:明道办公软件怎么样 编辑:程序博客网 时间:2024/06/07 02:12

<Pascal笔迹>>>steve挖矿

作者:A_Ender


[题目介绍]

原来MC可以这样玩:
Steve是一名矿工,他热衷于挖掘矿石。一天他来到了这片土地上,准备开采这里的矿产。他已经通过高(kai)科(wai)技(gua)手段了解到了这里的矿产分布,现在他想知道

在最多T个单位时间内,他能挖掘到的最大价值是多少?
Steve每个单位时间可以向左、右或下移动一格,并挖掘该格内的矿石。
Steve不能向上移动、或是挖掘头顶的矿石。矿石不会被重复挖掘,
意味着如果Steve经过一个格子多次,那么只有第一次经过可以获得相应价值的矿石。

[样例输入,输出]

[说明]输入数据第一行为三个整数n,m,T,表示地图为n行m列,时间上限为T。

接下来n行,每行m个字符,含义如下:

0:表示该方格价值为0(石头,挖出来后变成原石,没卵用)

1~9:表示该方格的价值 (煤炭,铁矿,金矿,绿宝石矿,钻石矿,等等,少了红石!)

P:表示该方格为Steve的初始位置

*:表示该方格不能被挖掘或行走(基岩)

数据保证第2行由m-1个"0"和1个"P"组成,且第3至n+1行不会出现"P"。

[说明]输出文件仅一行,一个整数,表示Steve在时限内能够获得的最大价值。

输入:

4 4 4

00P0

93*9

*999

***3

输出:27

[题目数据]

10>n,m,t>0


{本题套路}

搜索快线直通答案,注意不能往上走。

{算法详解}

{1}计下P字符的位置,其余的如基岩,矿石都标记下来,变成一个数字的二维数组。

{2}3种方向搜。

{3}时间是一个很好的终止条件。


{算法演示}

无。




<代码实现>

var
        n,i:longint;
        a,b:array[1..1000] of longint;
function sc:longint;
var
        b,c,i,k:longint;
begin
        b:=1;
        c:=0;
        k:=2;
        for i:=2 to n+1 do
        begin
                case a[i] of
                        1:b:=b*10+i;
                        2,3:begin
                                if k=2 then c:=c+b else c:=c-b;
                                k:=a[i];
                                b:=i;
                        end;
                end;
        end;
        sc:=c;
end;
procedure dg(x:longint);
var
        i:longint;
begin
        if x>n then
        begin
                if sc=0 then
                begin
                        write(1);
                        for i:=2 to n do
                        begin
                                if a[i]=1 then
                                        write(' ');
                                if a[i]=2 then
                                        write('+');
                                if a[i]=3 then
                                        write('-');
                                write(i);
                        end;
                        writeln;
                end;
        end
        else
        begin
                for i:=1 to 3 do
                begin
                        a[x]:=i;
                        dg(x+1);
                        a[x]:=0;
                end;
        end;
end;
begin
        read(n);
        a[n+1]:=2;
        dg(2);
end.