洛谷 P2747 Canada Tour 周游加拿大 动态规划
Description
你赢得了一场航空公司举办的比赛,奖品是一张加拿大机票。旅行在这家航空公司开放的最西边的城市开始,然后一直自西向东旅行,直到你到达最东边的城市,再由东向西返回,直到你回到开始的城市。每个城市只能访问一次,除了旅行开始的城市之外,这个城市必定要被访问两次(在旅行的开始和结束)。你不允许使用其他公司的航线或者用其他的交通工具。
给出这个航空公司开放的城市的列表,和两两城市之间的直达航线列表。找出能够访问尽可能多的城市的路线,这条路线必须满足上述条件,也就是从列表中的第一个城市开始旅行,访问到列表中最后一个城市之后再返回第一个城市。
Input
Line 1: 航空公司开放的城市数 N 和将要列出的直达航线的数量 V。N 是一个不大于 100 的正整数。V 是任意的正整数。
Lines 2..N+1: 每行包括一个航空公司开放的城市名称。城市名称按照自西向东排列。不会出现两个城市在同一条经线上的情况。每个城市的名称都是一个字符串,最多15字节,由拉丁字母表上的字母组成;城市名称中没有空格。
Lines N+2...N+2+V-1:每行包括两个城市名称(由上面列表中的城市名称组成),用一个空格分开,这样就表示两个城市之间的直达双程航线。
Ouput
Line 1: 按照最佳路线访问的不同城市的数量 M。如果无法找到路线,输出 1。
Sample Input
Sample Output
HINT
样例解释: Vancouver, Edmonton, Montreal, Halifax, Toronto, Winnipeg, Calgary, 和 Vancouver (回到开始城市,但是不算在不同城市之内)。
Solution
看起来很像一道费用流的题,但仔细思考一下我们不难发现动态规划便可以轻松解决,本题也可以通过floyd求最大环来解决。这里主要介绍动态规划的方法。
类似floyd,我们采用邻接表的方式建图,由于需要建立城市与数字之间的映射关系从而建图,大佬们一般用的是map,本蒟蒻不会那么高级的函数,采用暴力循环的方式。
由于要求路径不重复,我们可以把所求的路径分成两段,即从起点出发与回到起点的两条路径,那么假设有两个人分别走这两条路径,从而想出我们的状态:f[i][j]表示一个人到达i,另一个人到达j的状态数。状态转移方程可容易推得:
f[i][j]=max(f[i][k]+1)+1(k,j有航线且1<=k<j且f[i][k]>0)
Code
#include <stdio.h>
#include <algorithm>
#include <string.h>
#define N 110
using namespace std;
int f[N][N],map[N][N];
int n,v;
int ans=;
char a[N],b[N];
void add(int x,int y){map[x][y]=;map[y][x]=;}
struct note
{
int num;
char id[];
}city[N];
void floyd()
{
f[][]=;
for(int i=;i<n;i++)
for(int j=i+;j<=n;j++)
for(int k=;k<j;k++)
if(map[j][k]&&f[i][k]&&f[i][k]+>f[i][j])
f[i][j]=f[j][i]=f[i][k]+;
for(int i=;i<=n;i++)
if(map[i][n])
ans=max(ans,f[i][n]);
}
int main()
{
scanf("%d%d",&n,&v);
for(int i=;i<=n;i++)
{
scanf("%s",city[i].id+);
city[i].num=i;
}
for(int i=;i<=v;i++)
{
scanf("%s",a+);
scanf("%s",b+);
int x,y;
for(int j=;j<=n;j++)
{
if(strcmp(a+,city[j].id+)==)
x=city[j].num;
if(strcmp(b+,city[j].id+)==)
y=city[j].num;
}
add(x,y);
}
floyd();
printf("%d",ans);
}
洛谷 P2747 Canada Tour 周游加拿大 动态规划的更多相关文章
- 洛谷 P2747 [USACO5.4]周游加拿大Canada Tour 解题报告
P2747 [USACO5.4]周游加拿大Canada Tour 题目描述 你赢得了一场航空公司举办的比赛,奖品是一张加拿大环游机票.旅行在这家航空公司开放的最西边的城市开始,然后一直自西向东旅行,直 ...
- 洛谷 P2747 [USACO5.4]周游加拿大Canada Tour
P2747 [USACO5.4]周游加拿大Canada Tour 题目描述 你赢得了一场航空公司举办的比赛,奖品是一张加拿大环游机票.旅行在这家航空公司开放的最西边的城市开始,然后一直自西向东旅行,直 ...
- [洛谷P2747] [USACO5.4]周游加拿大Canada Tour
洛谷题目链接:[USACO5.4]周游加拿大Canada Tour 题目描述 你赢得了一场航空公司举办的比赛,奖品是一张加拿大环游机票.旅行在这家航空公司开放的最西边的城市开始,然后一直自西向东旅行, ...
- 【BZOJ2830/洛谷3830】随机树(动态规划)
[BZOJ2830/洛谷3830]随机树(动态规划) 题面 洛谷 题解 先考虑第一问. 第一问的答案显然就是所有情况下所有点的深度的平均数. 考虑新加入的两个点,一定会删去某个叶子,然后新加入两个深度 ...
- 【洛谷4769】[NOI2018] 冒泡排序(动态规划_组合数学)
题目: 洛谷 4769 博客页面左下角的嘴嘴瓜封神之战中的题目 分析: 一个排列交换次数为 \(\frac{1}{2}\sum_{i=1}^{n}|i-p_i|\) 的充要条件是这个排列不存在长度为 ...
- 洛谷P3515 [POI2011]Lightning Conductor(动态规划,决策单调性,单调队列)
洛谷题目传送门 疯狂%%%几个月前就秒了此题的Tyher巨佬 借着这题总结一下决策单调性优化DP吧.蒟蒻觉得用数形结合的思想能够轻松地理解它. 首先,题目要我们求所有的\(p_i\),那么把式子变一下 ...
- 洛谷P1973 [NOI2011]Noi嘉年华(动态规划,决策单调性)
洛谷题目传送门 DP题怕是都要大大的脑洞...... 首先,时间那么大没用,直接离散化. 第一问还好.根据题意容易发现,当一堆活动的时间有大量重叠的时候,更好的办法是把它们全部安排到一边去.那么我们转 ...
- 【BZOJ3205_洛谷3638】[APIO2013]机器人(动态规划)
题目: 洛谷3638 分析: 卡了一天的神题--(OrzJumpmelon) 首先预处理出从点\(p\)向\(d\)方向出发最终能到达的点\(nxt[p][d]\).这个可以直接记忆化搜索解决.如果出 ...
- 洛谷P2747周游加拿大Canada Tour [USACO5.4] dp
正解:dp 解题报告: 传送门! 其实这题是我做网络流的时候发现了这题,感觉有点像双倍经验,,,? 但是我还不想写网络流的题解,,,因为网络流24题都还麻油做完,,,想着全做完了再写个总的题解什么的( ...
随机推荐
- 【快学springboot】在springboot中写单元测试[Happyjava]
前言 很多公司都有写单元测试的硬性要求,在提交代码的时候,如果单测通不过或者说单元测试各种覆盖率不达标,会被拒绝合并代码.写单元测试,也是保证代码质量的一种方式. junit单元测试 相信绝大多数的J ...
- js去后台传递的值
function test(){ var param = [[${list}]];//以集合为例 } 如果list里面是实体类那么就需要重写toString,或者转为json
- insert和delete底层实现的方式
operator delete ()全局函数原型: /*operator delete: 该函数最终是通过free来释放空间的*/void operator delete(void *pUserDat ...
- ajax请求Controller,返回信息乱码问题
参考:https://blog.csdn.net/hgg923/article/details/53610548 @RequestMapping(value = "changeMobile& ...
- 如何在adapter 中调用activity的方法
如何在adapter 中调用activity的方法 2015-08-07 17:06匿名 | 浏览 808 次 iWorkjavaAndroid public class HistoryData e ...
- 产品降价、AR技术、功能降级,库克和苹果还有哪些底牌可以打?
经过十年的高速发展,苹果和iPhone迎来了拐点,他们去年的境况,也连累了一大批的供应商,但如今的苹果财务健康,产业链稳固,在面对经济寒冬和激烈竞争的时候,有很多牌可以打,而且常常会在关键时刻打出来, ...
- 【高软作业4】:Tomcat 观察者模式解析 之 Lifecycle
一. 预备 如果你是Windows用户,使用Eclipse,并且想自行导入源码进行分析,你可能需要:Eclipse 导入 Tomcat 源码 如果你已遗忘 观察者模式,那么你可以通过该文章回顾:设计模 ...
- mysqlworkbench导入sql文件
直接给上神秘地址怕自己以后忘记:https://blog.csdn.net/u010801439/article/details/78762387
- leetcode841 Keys and Rooms
""" There are N rooms and you start in room 0. Each room has a distinct number in 0, ...
- 2017北京网络赛 J Pangu and Stones 区间DP(石子归并)
#1636 : Pangu and Stones 时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描述 In Chinese mythology, Pangu is the fi ...