链接: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. zip方式安装MySQL提示找不到 MSVCP120.dll的解决方法

    电脑重装系统后,用zip的方式安装MySQL,在执行mysqld --initialize的时候提示 由于找不到 MSVCP120.dll,无法继续执行代码.重新安装程序可能会解决此问题. 解决的方法 ...

  2. android ndk下没有pthread_yield,好在std::this_thread::yield()可以达到同样的效果

    一个多线程的算法中,发现线程利用率只有47%左右,大量的处理时间因为usleep(500)而导致线程睡眠: 性能始终上不去. 把usleep(500)修改为std::this_thread::yiel ...

  3. C# 同步 异步 回调 状态机 async await Demo

    源码 https://gitee.com/s0611163/AsyncAwaitDemo 为什么会研究这个? 我们项目的客户端和服务端通信用的是WCF,我就想,能不能用异步的方式调用WCF服务呢?或者 ...

  4. 初步学习TypeScript

    使用Visual Studio Code搭建TypeScript开发环境 1.TypeScript是干什么的 ? TypeScript是由微软Anders Hejlsberg(安德斯·海尔斯伯格,也是 ...

  5. 字节跳动的一道python面试题

    #!/usr/bin/python #coding=utf-8 #好好学习,天天向上 lst = ['hongkong','xiantyk','chinat','guangdong','z'] lst ...

  6. kubernetes之部署traefik-ingress分为http和https

    1 理解Ingress 简单的说,ingress就是从kubernetes集群外访问集群的入口,将用户的URL请求转发到不同的service上.Ingress相当于nginx.apache等负载均衡方 ...

  7. ICLR2021对比学习(Contrastive Learning)NLP领域论文进展梳理

    本文首发于微信公众号「对白的算法屋」,来一起学AI叭 大家好,卷王们and懂王们好,我是对白. 本次我挑选了ICLR2021中NLP领域下的六篇文章进行解读,包含了文本生成.自然语言理解.预训练语言模 ...

  8. CF888F Connecting Vertices

    首先可以发现的是,因为两条线段不能在除了端点处相交,因此整个多边形最终一定会被连接成最上方由若干条线段在端点处相交连成,每条线段下方又是一个子结构. 因此你会发现,每个合法的状态都能被分成两个合法的子 ...

  9. Redis集群安装详细步骤

    环境: Centos7    redis3.0 三台虚拟机主机名分别为 master   node1  node2 如果单机的时候设置过密码最好把密码去掉,避免位置的错误. 拍个快照方便恢复. 1.创 ...

  10. 基于java处理.docx格式的word合并

    如下实例是将 2.docx和3.docx合并,写到empty.docx中,不适用于.doc格式,public static void main(String[] args) { File file1 ...