洛谷 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题都还麻油做完,,,想着全做完了再写个总的题解什么的( ...
随机推荐
- 跨服务器的SQL语句如何书写
select * into 本地库名..表名 from OPENDATASOURCE( 'SQLOLEDB', 'Data ...
- 从数据库中查询所有表及所有字段的SQL语句
从数据库中查询所有表及所有字段的SQL语句 由于一个小项目的需要,近日完成一个从数据库中查询所有表及所有字段的方法,其实用两条SQL语句就可以完成. Sql Server版:列出当前DB中所有表:se ...
- java基础面试题(转)
这里收集了一些java 面试题的链接: http://blog.csdn.net/jackfrued/article/details/44921941 原文来自:http://www.cnblogs. ...
- java 解析json格式数据(转)
2012-07-30 16:43:54| 分类: java | 标签:java json |举报|字号 订阅 有时候我们可能会用到json格式的数据进行数据的传输,那么我们怎么把接收到 ...
- 吴裕雄--天生自然JAVA数据库编程:执行数据库更新操作
import java.sql.Connection ; import java.sql.DriverManager ; import java.sql.Statement ; public clas ...
- Ayoub's function
思维,就是反过来想,题解太强了 #include <bits/stdc++.h> using namespace std; int main() { long long t; cin> ...
- Day5 - B - Wireless Network POJ - 2236
An earthquake takes place in Southeast Asia. The ACM (Asia Cooperated Medical team) have set up a wi ...
- 009.CI4框架CodeIgniter, 网页访问GET的URL参数获取,分段输出URL参数
01.代码如下,我们给在PHP CI4框架中定义了一个show函数,并给了3个参数,代码如下: <?php namespace App\Controllers\System; use App\C ...
- 010.Delphi插件之QPlugins,遍历服务接口
这个DEMO注意是用来看一个DLL所拥有的全部服务接口 演示效果如下 代码如下: unit Frm_Main; interface uses Winapi.Windows, Winapi.Messag ...
- excel表格数据导入导出
/** * 导出数据到excel表格 * Created by shenjianhua on 2018-12-28 */ package com.luer.comm.excel; import jav ...