链接:http://vjudge.net/problem/viewProblem.action?id=24902

描述:由城镇、村子和双向边组成的图,从A+B走到1,要求最短路。有K次瞬移的机会,距离不超过L,且不能经过城镇。

思路:一个图上的DP。首先floyd处理,然后做dp。

定义f[i][j]:从1到i还有j次瞬移机会,花费的最少的时间。

状态转移:f[i][j]=min{f[k][j]+dis[k][i],min{f[k][j-1]}}

边界处理:f[1][k]=0 和 f[i][0]=dis[1][i]

我的实现:

 1 #include <iostream>
2 #include <cstdio>
3 #include <cstring>
4 using namespace std;
5 #define MaxN 120
6 #define INF 100000
7 int f[MaxN][MaxN],dis[MaxN][MaxN];
8 bool OK[MaxN][MaxN];
9 int T,n,A,B,M,L,K;
10 inline void Get_int(int &Ret)
11 {
12 char ch;
13 bool flag=false;
14 for(;ch=getchar(),ch<'0'||ch>'9';)
15 if(ch=='-')
16 flag=true;
17 for(Ret=ch-'0';ch=getchar(),ch>='0'&&ch<='9';Ret=Ret*10+ch-'0');
18 flag&&(Ret=-Ret);
19 }
20 inline void Read_Clean()
21 {
22 Get_int(A);Get_int(B);Get_int(M);Get_int(L);Get_int(K);
23 n=A+B;
24 memset(dis,0x3f,sizeof(dis));
25 memset(OK,false,sizeof(OK));
26 memset(f,0,sizeof(f));
27 int i,x,y,l;
28 for(i=1;i<=M;++i)
29 {
30 Get_int(x);Get_int(y);Get_int(l);
31 dis[x][y]=dis[y][x]=l;
32 if(l<=L)
33 OK[x][y]=OK[y][x]=true;
34 }
35 }
36 void floyd()
37 {
38 int i,j,k;
39 for(k=1;k<=n;++k)
40 for(i=1;i<=n;++i)
41 for(j=1;j<=n;++j)
42 if(dis[i][j]>dis[i][k]+dis[k][j])
43 {
44 dis[i][j]=dis[i][k]+dis[k][j];
45 if(k<=A&&dis[i][j]<=L)
46 OK[i][j]=OK[j][i]=true;
47 }
48 }
49 void DP()
50 {
51 int i,j,k,tmp;
52 for(i=2;i<=n;++i)
53 f[i][0]=dis[1][i];
54 for(i=2;i<=n;++i)
55 {
56 for(j=1;j<=K;++j)
57 {
58 tmp=INF;
59 for(k=1;k<i;++k)
60 {
61 if(OK[k][i])
62 tmp=min(tmp,f[k][j-1]);
63 tmp=min(tmp,f[k][j]+dis[k][i]);
64 }
65 f[i][j]=tmp;
66 }
67 }
68 printf("%d\n",f[n][K]);
69 }
70 int main()
71 {
72 Get_int(T);
73 while(T--)
74 {
75 Read_Clean();
76 floyd();
77 DP();
78 }
79 return 0;
80 }

PS.破题出现了困难,最开始除了暴搜什么思路都没有。之后在暴搜的基础上发现了解题方法。总的来说觉得这道题蛮难的,zyy的路还很长啊~~~

[题解]UVA10269 Adventure of Super Mario的更多相关文章

  1. UVA10269 Adventure of Super Mario(Floyd+DP)

    UVA10269 Adventure of Super Mario(Floyd+DP) After rescuing the beautiful princess, Super Mario needs ...

  2. UVA-10269 Adventure of Super Mario (dijkstra)

    题目大意:有A个村庄,B个城市,m条边,从起点到终点,找一条最短路径.但是,有一种工具可以使人不费力的移动L个长度,但始末点必须是城市或村庄.这种工具有k个,每个只能使用一次,并且在城市内部不可使用, ...

  3. ZOJ1232 Adventure of Super Mario(DP+SPFA)

    dp[u][t]表示从起点出发,到达i点且用了t次magic boot时的最短时间, 方程如下: dp[v][t]=min(dp[v][t],dp[u][t]+dis[u][v]); dp[v][t] ...

  4. ZOJ1232 Adventure of Super Mario spfa上的dp

    很早之前听说有一种dp是在图上的dp,然后是在跑SPFA的时候进行dp,所以特地找了一题关于在SPFA的时候dp的. 题意:1~a是村庄 a+1~a+b是城堡,存在m条无向边.求由a+b->1的 ...

  5. UVA 10269 Adventure of Super Mario

    看了这里 http://blog.csdn.net/acm_cxlove/article/details/8679230的分析之后自己又按照自己的模板写了一遍,算是对spfa又加深了一步认识(以前真是 ...

  6. UVa 10269 Adventure of Super Mario (Floyd + DP + BFS)

    题意:有A个村庄,B个城市,m条边,从起点到终点,找一条最短路径.但是,有一种工具可以使人不费力的移动L个长度,但始末点必须是城市或村庄.这种工具有k个,每个只能使用一次,并且在城市内部不可使用,但在 ...

  7. ZOJ 1232 Adventure of Super Mario (Floyd + DP)

    题意:有a个村庄,编号为1到a,有b个城堡,编号为a+1到a+b.现在超级玛丽在a+b处,他的家在1处.每条路是双向的,两端地点的编号以及路的长度都已给出.路的长度和通过所需时间相等.他有一双鞋子,可 ...

  8. zoj1232Adventure of Super Mario(图上dp)

    题目连接: 啊哈哈.点我点我 思路: 这个题目是一个图上dp问题.先floyd预处理出图上全部点的最短路,可是在floyd的时候,把可以用神器的地方预处理出来,也就是转折点地方不能为城堡..预处理完成 ...

  9. hdu4417(Super Mario)—— 二分+划分树

    Super Mario Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total ...

随机推荐

  1. GIS :元宇宙未来发展的有力技术支撑

    摘要:元宇宙是描述未来互联网迭代发展的一个概念,是一个将现实世界和虚拟世界相互融合的一个可感知的持久.共享的3D虚拟空间组成的世界. 本文分享自华为云社区<[云驻共创]元宇宙漫游指南-新一代GI ...

  2. C# 类的继承问题 正方形周长面积计算问题

    1. 设计编写一个控制台应用程序,练习类的继承. (1) 编写一个抽象类 People,具有"姓名","年龄"字段,"姓名"属性,Work ...

  3. 分享一个学习cesiumjs的中文社区

    在cesiumjs中文社区的时间线中我写到: 2018年10月10日 注册用户数51,日uv破100 Mark截图 2018年06月22日 上线测试 2018年06月19日 获得cesiumcn.or ...

  4. CSS八种让人眼前一亮的HOVER效果

    一.发送效果 HTML <div id="send-btn"> <button> // 这里是一个svg的占位 Send </button> & ...

  5. Vi方向键变乱码 退格键不能使用

    Ubuntu下,使用vi的时候有点问题,就是在编辑模式下使用方向键的时候,并不会使光标移动,而是在命令行中出现[A [B [C [D之类的字母,而且编辑错误的话,就连平时关于的退格键(Backspac ...

  6. 传统的DOM渲染方式?

    1.什么是DOM渲染? 所谓的DOM渲染是指的是对于浏览器中展现给用户的DOM文档的生成的过程. 2.DOM渲染的过程,大致可以分为三个阶段: --纯后端渲染 --纯前端渲染 --服务端的JS渲染结合 ...

  7. 在build中配置resources, 来防止我们资源导出失败问题

    <!--在build中配置resources, 来防止我们资源导出失败问题--> <build> <resources> <resource> < ...

  8. Solaris平台,如何通过端口号快速查看PID(进程)

    1. vi /tmp/test.ksh #!/bin/ksh line='---------------------------------------------' pids=$(/usr/bin/ ...

  9. 如何在pyqt中使用 QGraphicsView 实现图片查看器

    前言 在 PyQt 中可以使用很多方式实现照片查看器,最朴素的做法就是重写 QWidget 的 paintEvent().mouseMoveEvent 等事件,但是如果要在图像上多添加一些形状,那么在 ...

  10. vivo直播应用技术实践与探索

    一.概述 2019年vivo直播平台立项,初期与优秀的顶部直播平台进行联运直播开发,进行市场,产品和技术的初步探索:再到后来为了丰富直播的内容和形式,开始自己独立探索:之后,我们结合vivo现阶段的直 ...