题意:

copy自http://blog.csdn.net/monkey_little/article/details/6637805

有A个村子和B个城堡,村子标号是1~A,城堡标号是A+1~B。马里奥现在位于城堡B,他要带公主回到村子1,他有一双靴子,穿上之后可以不用时间就能从一个地方飞到另外一个地方,但是穿着靴子不能穿过城堡,穿靴子的次数也不能超过 K 次,一次不能超过 L km。求从 A+B 到 1 所用的最短时间。

思路:

首先是利用FLOYD找出任何两点之间的最短路,以及这两点之间能否使用靴子。

使用靴子有两种限制,第一种是距离不能超过L,第二种是中间不能存在城堡。

第一种限制一目了然,第二种限制就要结合FLOYD枚举中间节点的地方下手,加入枚举的中间节点是城堡的话,那么无论这条路多长都不能使用靴子。

然后是图DP。

用dp[i][j]记录从第1个点到第i个点之间使用j次靴子的最短路。

状态转移方程是dp[i][j]=min(dp[k][j-1],dp[k][j]+dis[k][i]).(如果两点之间可以使用靴子的话)

这里的K需要枚举,用到的也是FLOYD里边的DP思想。

上代码

#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
const int inf=0x3f3f3f3f;
int A,B,M,L,K;
int pho[][];
int dp[][];
bool canfly[][];
void FLOYD()
{
for(int k=; k<=A+B; k++)
{
for(int i=; i<=A+B; i++)
{
for(int j=; j<=A+B; j++)
{
if(pho[i][k]+pho[k][j]<pho[i][j])
{
pho[i][j]=pho[i][k]+pho[k][j]; }
if(k<=A&&pho[i][j]<=L)
{
canfly[i][j]=canfly[j][i]=;
}
}
}
}
}
void DP()
{
for(int i=; i<=K; i++)
{
dp[][i]=;
}
for(int i=; i<=A+B; i++)
{
dp[i][]=pho[][i];
}
for(int i=; i<=A+B; i++)
{
for(int j=; j<=K; j++)
{
int Min=inf;
for(int w=; w<i; w++)
{
if(canfly[w][i])
Min=min(Min,dp[w][j-]);
Min=min(Min,dp[w][j]+pho[w][i]);
}
dp[i][j]=Min;
}
}
}
int main()
{
int t;
int a,b,c;
scanf("%d",&t);
while(t--)
{
memset(canfly,,sizeof(canfly));
scanf("%d%d%d%d%d",&A,&B,&M,&L,&K);
for(int i=; i<=A+B; i++)
{
for(int j=; j<=A+B; j++)
{
pho[i][j]=inf;
}
pho[i][i]=;
}
for(int i=; i<=M; i++)
{
scanf("%d%d%d",&a,&b,&c);
pho[a][b]=pho[b][a]=c;
if(c<=L)
{
canfly[a][b]=canfly[b][a]=;
}
}
FLOYD();
DP();
printf("%d\n",dp[A+B][K]);
}
}

ZOJ 1232 【灵活运用FLOYD】 【图DP】的更多相关文章

  1. 【Trie图+DP】BZOJ1030[JSOI2007]-文本生成器

    [题目大意] 给出单词总数和固定的文章长度M,求出至少包含其中一个单词的可能文章数量. [思路] 对于至少包含一个的类型,我们可以考虑补集.也就是等于[总的文章可能性总数-不包含任意一个单词的文章总数 ...

  2. Tarjan缩点+DAG图dp

    题目背景 缩点+DP 题目描述 给定一个n个点m条边有向图,每个点有一个权值,求一条路径,使路径经过的点权值之和最大.你只需要求出这个权值和. 允许多次经过一条边或者一个点,但是,重复经过的点,权值只 ...

  3. HDU 2296 Ring ( Trie图 && DP && DP状态记录)

    题意 : 给出 m 个单词,每一个单词有一个权重,如果一个字符串包含了这些单词,那么意味着这个字符串拥有了其权重,问你构成长度为 n 且权重最大的字符串是什么 ( 若有权重相同的,则输出最短且字典序最 ...

  4. codeforces 677D(分层图dp)

    Codeforces 677D 传送门:https://codeforces.com/contest/677/problem/D 题意: 给你一个n*m的方格图,每个点有一个权值val,现在要求你从坐 ...

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

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

  6. AOJ 2200 Mr. Rito Post Office(Floyd+单调DP)

    [题目链接] http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=2200 [题目大意] 一张图中有陆路和水路,水路必须要有船才能走,当船 ...

  7. [NOIP2016 D1T3]换教室 【floyd+概率dp】

    题目描述 对于刚上大学的牛牛来说,他面临的第一个问题是如何根据实际情况申请合适的课程. 在可以选择的课程中,有 2n2n 节课程安排在 nn 个时间段上.在第 ii(1 \leq i \leq n1≤ ...

  8. zoj 3469 Food Delivery 区间dp + 提前计算费用

    Time Limit: 2 Seconds      Memory Limit: 65536 KB When we are focusing on solving problems, we usual ...

  9. ACM: HDU 5418 Victor and World - Floyd算法+dp状态压缩

    HDU 5418 Victor and World Time Limit:2000MS     Memory Limit:131072KB     64bit IO Format:%I64d & ...

随机推荐

  1. SQL系列学习 基础数据

    //班主任表 CREATE TABLE [dbo].[teacher]( [id] [int] IDENTITY(1,1) NOT NULL primary key, [name] [varchar] ...

  2. H3C S5024P交换机 vlan实验

    H3C S5024P交换机第二次vlan实验 实验1 与交换机端口G0/1和G0/2相连的PC1与PC2属于VLAN 1,与G0/3和G0/4相连的PC3和PC4属于VLAN 2,PC1.PC2.PC ...

  3. Python3 OpenCV3 图像处理基础

    开发环境搭建 本人使用的是Ubuntu 16.04LTS. 1.安装Python3 ## 其实 Ubuntu 16.04 系统自带了 Python 3.5.2,因此不需要再安装了?但是需要安装一些开发 ...

  4. Windows 7桌面显示图标窗口句柄的获取

    在windows XP时代,我们获取桌面图标窗口的句柄往往用一下语句: HWND hwndParent = ::FindWindow( "Progman", "Progr ...

  5. Encryption requires the OpenSSL PHP extension 报错

    报错截图: 解决办法: 修改php.ini配置文件,打开该拓展 open php.ini search “opensll” remove the semicolon from: extension=p ...

  6. jvm 内存溢出 在myeclipse中加大tomcat的jvm内存 java.lang.OutOfMemoryError: PermGen space

    使用myeclipse启动两个SSH2的部署在tomcat6下的项目 报出java.lang.OutOfMemoryError: PermGen space 解决办法: 在myeclipse中加大jv ...

  7. 20. Valid Parentheses (python版)

    Given a string containing just the characters '(', ')', '{', '}', '[' and ']', determine if the inpu ...

  8. Java:追加文件内容

    文章来源:https://www.cnblogs.com/hello-tl/p/9139367.html import java.io.*; public class FileBasicOperati ...

  9. python基础知识12-异常

    几个命令: sudo apt install tree tree 当前目录以树形结构展示出来. tree a 查看a内的所有目录.也可以跟绝对路径. a = input('请输入您的密码') 将用户输 ...

  10. C语言学习9

    婚礼的谎言 三对情侣参加婚礼,三个新郎为A.B.C,三个新娘为X.Y.Z.有人想知道究竟水域谁结婚2,于是就问新人中的三位,得到结果如下:A说他将和X结婚:X说她的未婚夫是C:C说他将和Z结婚.这人事 ...