[题解]UVA10269 Adventure of Super Mario
链接: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的更多相关文章
- UVA10269 Adventure of Super Mario(Floyd+DP)
UVA10269 Adventure of Super Mario(Floyd+DP) After rescuing the beautiful princess, Super Mario needs ...
- UVA-10269 Adventure of Super Mario (dijkstra)
题目大意:有A个村庄,B个城市,m条边,从起点到终点,找一条最短路径.但是,有一种工具可以使人不费力的移动L个长度,但始末点必须是城市或村庄.这种工具有k个,每个只能使用一次,并且在城市内部不可使用, ...
- 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] ...
- ZOJ1232 Adventure of Super Mario spfa上的dp
很早之前听说有一种dp是在图上的dp,然后是在跑SPFA的时候进行dp,所以特地找了一题关于在SPFA的时候dp的. 题意:1~a是村庄 a+1~a+b是城堡,存在m条无向边.求由a+b->1的 ...
- UVA 10269 Adventure of Super Mario
看了这里 http://blog.csdn.net/acm_cxlove/article/details/8679230的分析之后自己又按照自己的模板写了一遍,算是对spfa又加深了一步认识(以前真是 ...
- UVa 10269 Adventure of Super Mario (Floyd + DP + BFS)
题意:有A个村庄,B个城市,m条边,从起点到终点,找一条最短路径.但是,有一种工具可以使人不费力的移动L个长度,但始末点必须是城市或村庄.这种工具有k个,每个只能使用一次,并且在城市内部不可使用,但在 ...
- ZOJ 1232 Adventure of Super Mario (Floyd + DP)
题意:有a个村庄,编号为1到a,有b个城堡,编号为a+1到a+b.现在超级玛丽在a+b处,他的家在1处.每条路是双向的,两端地点的编号以及路的长度都已给出.路的长度和通过所需时间相等.他有一双鞋子,可 ...
- zoj1232Adventure of Super Mario(图上dp)
题目连接: 啊哈哈.点我点我 思路: 这个题目是一个图上dp问题.先floyd预处理出图上全部点的最短路,可是在floyd的时候,把可以用神器的地方预处理出来,也就是转折点地方不能为城堡..预处理完成 ...
- hdu4417(Super Mario)—— 二分+划分树
Super Mario Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total ...
随机推荐
- Cesium入门10 - 3D Tiles
Cesium入门10 - 3D Tiles Cesium中文网:http://cesiumcn.org/ | 国内快速访问:http://cesium.coinidea.com/ 我们团队有时把Ces ...
- Java 面试题史上最强整理
https://mp.weixin.qq.com/s/kJpRgfI3zT77XqMeRfmmQQ
- Go 循环控制
#### Go 循环控制昨天有工作要忙, 断更一天,不过学习的事情,还是每天要坚持; 我还有头发, 还能学习^_^.***倘若我心中的山水, 你眼中都看到***上一节学习完流程控制,总结一下switc ...
- Go 变量及基本数据类型3
#### Go 变量及基本数据类型(三)今天学习一下剩下的两个基本数据类型(布尔类型,字符串类型)以及基本数据类型的相互转换##### 布尔类型布尔类型也称为bool 类型, bool 类型只允许取值 ...
- Java安全之C3P0链利用与分析
Java安全之C3P0链利用与分析 0x00 前言 在一些比较极端情况下,C3P0链的使用还是挺频繁的. 0x01 利用方式 利用方式 在C3P0中有三种利用方式 http base JNDI HEX ...
- CKKS Part2: CKKS的编码和解码
该文章翻译自CKKS EXPLAINED, PART 2: FULL ENCODING AND DECODING,主要介绍CKKS方案中是如何编码和解码的(如何将复数向量转成整数多项式,以及如何求逆运 ...
- 计算机开放电子书 2021 RC2
下载方式 pip install CDNDrive # 或 # pip install git+https://github.com/apachecn/CDNDrive cdrive download ...
- Python 迁移学习实用指南 | iBooker·ApacheCN
原文:Hands-On Transfer Learning with Python 协议:CC BY-NC-SA 4.0 自豪地采用谷歌翻译 不要担心自己的形象,只关心如何实现目标.--<原则& ...
- Git常用命令(超实用)
Git常用命令 一.Git常用命令 1.1 创建SSH Key 1.2 仓库 1.3 增加/删除文件 1.4 代码提交 1.5 分支 1.6 标签 1.7 查看信息 1.8 远程同步 1.9 撤销 1 ...
- 【第十二期】腾讯后台实习初试、复试、HR面经 (许愿OC)
楼主投的很晚属于正常批才开始,初试面试官比较重基础,复试面试官比较看综合能力,HR小姐姐声音好听,腾讯面试官都特别nice! 一面: 看你项目很多,你挨个给我介绍一遍吧 我:一大堆按着简历介绍 日志文 ...