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.
- Pascal程序笔迹:steve挖矿
- Pascal程序笔迹:快速幂
- Pascal程序笔迹:弧形判断
- Pascal程序笔迹:和为零
- C++程序面试笔迹一
- C++程序面试笔迹二
- C++程序面试笔迹四
- C++程序面试笔迹五
- C++程序面试笔迹六
- 笔迹
- 笔迹
- PASCAL基础-程序体
- 我是程序猿-Pascal
- 最大正数pascal程序
- 拼数pascal程序
- 纪念品分组pascal程序
- 美元汇率pascal程序
- 零件分组pascal程序
- tcp/ip学习笔记--第24 TCP futures and performance
- Qt 嵌入式环境搭建(二)
- 什么是MyBatis ?
- CCF201312-3 最大的矩形(100分)
- 20171202做的题
- Pascal程序笔迹:steve挖矿
- AdaBoost集成学习算法【转载】
- PAT
- 【C语言】编写代码实现:求一个整数在内存中的二进制位中1的个数
- 华为LiteOS真相 噱头大于实际意义
- poj3253——Fence Repair
- C6748_PWM_ECAP
- 20171202做的题
- 017 大数定律(车比学夫、辛钦)及中心极限定理