dwarf tower SSL_2516

本文介绍了一道关于游戏DwarfTower的问题,玩家需要通过直接购买或利用两种物品合成的方式获得目标物品,并寻求最低成本的策略。文章提供了解决方案,包括数据结构设计和最短路径算法SPFA的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

2014年中山市选拔赛 dwarf tower

Time Limit:40000MS  Memory Limit:65536K
Total Submit:45 Accepted:18 
Case Time Limit:1000MS

Description

Vasya在玩一个叫做"Dwarf Tower"的游戏,这个游戏中有n个不同的物品,它们的编号为1到n。现在Vasya想得到编号为1的物品。 
获得一个物品有两种方式: 
1. 直接购买该物品,第i件物品花费的钱为ci 
2. 用两件其他物品合成所需的物品,一共有m种合成方式。 
请帮助Vasya用最少的钱获得编号为1的物品。

Input

第一行有两个整数n,m(1<=n<=10000,0<=m<=100000),分别表示有n种物品以及m种合成方式。 
接下来一行有n个整数,第i个整数ci表示第i个物品的购买价格,其中0<=ci<=10^9。 
接下来m行,每行3个整数ai,xi,yi,表示用物品xi和yi可以合成物品ai,其中(1<=ai,xi,yi<=n; ai<>xi, xi<>yi, yi<>ai)

Output

一行,一个整数表示获取物品1的最少花费。

Sample Input

5 3
5 0 1 2 5
5 2 3
4 2 3
1 4 5

Sample Output

2

Hint

数据范围 
60%的数据,n<=100 
100%的数据,n<=10000,m<=100000

Source

AC 100

思路:刚开始我居然想到了FloydT^T<蕾姆>,于是样例都没过……然后我想到用Forf,可是意外发现又不会写,完了,请教大佬把!Orz.

这题是这样的,我们可以根据条件数据创造一个图,边权有很多种,可以直接买(一条边),也可以换(另一边),另一边的情况要打邻接表(SPFA+邻接表~%/_/#@$$$?)便可以画一个图,然后枚举物品做最短路SPFA,输出对于1为终点的最短路即可。

var
 e:array[0..10005]of boolean;
 next,d,s,t,w,c,list:array[0..200005]of longint;
 n,i,j,m,x,y,a:longint;
procedure spfa;
var
 u,v,head,tail:longint;
begin
 for u:=1 to n do
  begin
   head:=0;
   tail:=1;
   e[u]:=false;
   c[1]:=u;
repeat
     inc(head);
     v:=list[c[head]];
     while v>0 do begin
                   if d[w[v]]+d[s[v]]<d[t[v]] then
                              begin
                               d[t[v]]:=d[w[v]]+d[s[v]];
                                if e[t[v]] then
                                   begin
                                    e[t[v]]:=false;
                                    inc(tail);
                                    c[tail]:=t[v];
                                   end;
                              end;
                   v:=next[v];
                  end;
         e[c[head]]:=true;
until head >= tail;
end;
end;
begin
fillchar(e,sizeof(e),false);
 read(n,m);
 for i:=1 to n do begin
                   read(d[i]);
                   e[i]:=true;
                  end; readln;
j:=1;
 for i:=1 to m do
  begin
   read(a,x,y);
   s[j]:=x; t[j]:=a; w[j]:=y;
   next[j]:=list[s[j]];
   list[s[j]]:=j;
   inc(j);
   s[j]:=y; t[j]:=a; w[j]:=x;
   next[j]:=list[s[j]];
   list[s[j]]:=j;
   inc(j);
  end;
 spfa;
writeln(d[1]);
end.


内容概要:本文档详细介绍了基于MATLAB实现的无人机三维路径规划项目,核心算法采用蒙特卡罗树搜索(MCTS)。项目旨在解决无人机在复杂三维环境中自主路径规划的问题,通过MCTS的随机模拟与渐进式搜索机制,实现高效、智能化的路径规划。项目不仅考虑静态环境建模,还集成了障碍物检测与避障机制,确保无人机飞行的安全性和效率。文档涵盖了从环境准备、数据处理、算法设计与实现、模型训练与预测、性能评估到GUI界面设计的完整流程,并提供了详细的代码示例。此外,项目采用模块化设计,支持多无人机协同路径规划、动态环境实时路径重规划等未来改进方向。 适合人群:具备一定编程基础,特别是熟悉MATLAB和无人机技术的研发人员;从事无人机路径规划、智能导航系统开发的工程师;对MCTS算法感兴趣的算法研究人员。 使用场景及目标:①理解MCTS算法在三维路径规划中的应用;②掌握基于MATLAB的无人机路径规划项目开发全流程;③学习如何通过MCTS算法优化无人机在复杂环境中的飞行路径,提高飞行安全性和效率;④为后续多无人机协同规划、动态环境实时调整等高级应用打下基础。 其他说明:项目不仅提供了详细的理论解释和技术实现,还特别关注了实际应用中的挑战和解决方案。例如,通过多阶段优化与迭代增强机制提升路径质量,结合环境建模与障碍物感知保障路径安全,利用GPU加速推理提升计算效率等。此外,项目还强调了代码模块化与调试便利性,便于后续功能扩展和性能优化。项目未来改进方向包括引入深度强化学习辅助路径规划、扩展至多无人机协同路径规划、增强动态环境实时路径重规划能力等,展示了广阔的应用前景和发展潜力。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值