usaco5.4.1 Canada Tour

[Unity_Plastic SCM小技巧] 使用 UnityYAMLMerge 工具合并场景和预制件文件 首先YAMLMerge工具其实并不局限于PlasticSCM,git也可以,它是内置在Editor内的一个更加智能的版本控制工具,只不过正常不会启用,他的目录在C:\Program Files\Unity\Editor\Data\Tools\UnityYAMLMerge.exe(Unity Editor安装目录),MAC上:/Applications/Unity/Unity.app/Content... 阅读详情

一 原题

Canada Tour

You have won a contest sponsored by an airline. The prize is a ticket to travel around Canada, beginning in the most western point served by this airline, then traveling only from west to east until you reach the most eastern point served, and then coming back only from east to west until you reach the starting city. No city may be visited more than once, except for the starting city, which must be visited exactly twice (at the beginning and the end of the trip). You are not allowed to use any other airline or any other means of transportation.

Given a list of cities served by the airline and a list of direct flights between pairs of cities, find an itinerary which visits as many cities as possible and satisfies the above conditions beginning with the first city and visiting the last city on the list and returning to the first city.

PROGRAM NAME: tour

INPUT FORMAT

Line 1:The number N of cities served by the airline and the number V of direct flights that will be listed. N will be a positive integer not larger than 100. V is any positive integer.
Lines 2..N+1:Each line contains a name of a city served by the airline. The names are ordered from west to east in the input file. There are no two cities in the same meridian. The name of each city is a string of, at most, 15 digits and/or characters of the Latin alphabet; there are no spaces in the name of a city.
Lines N+2..N+2+V-1:Each line contains two names of cities (taken from the supplied list), separated by a single blank space. This pair is connected by a direct, two-way airline flight.

SAMPLE INPUT (file tour.in)

8 9	
Vancouver		
Yellowknife	
Edmonton
Calgary
Winnipeg
Toronto	
Montreal
Halifax	
Vancouver Edmonton
Vancouver Calgary	
Calgary Winnipeg
Winnipeg Toronto
Toronto Halifax
Montreal Halifax
Edmonton Montreal
Edmonton Yellowknife
Edmonton Calgary

OUTPUT FORMAT

Line 1:The number M of different cities visited in the optimal itinerary. Output 1 if no itinerary is possible.

SAMPLE OUTPUT (file tour.out)

7

Namely: Vancouver, Edmonton, Montreal, Halifax, Toronto, Winnipeg, Calgary, and Vancouver (but that's not a different city). 



二 分析

给定n个由西向东排列的城市和城市间的联通关系,记最西部的城市为A,最东部的城市为B,题目要求从A出发到达B后再返回A的最长路径(途经的城市数目最多),同一城市不能被访问两次。
首先,我们如果把从B到A的路径反向,原题等价于找两条从A出发到达B的路径,这两条路径除了两个端点外不相交,答案就是两条路径长度之和的最大值。
如果用搜索的方法,假设函数f(x, y)可以返回甲在城市x,乙在城市y时经过的最多城市数,我们要求的就是f(n,n),f(a,b)=max{f(a,c)+1 | b和c连通且c未被f(a,b)的对应路径访问过}。
看起来是一个可行的解,但事实上“c未被f(a,b)的对应路径访问过”这一条件是多余的,因为题目中给定了城市之间的东西关系,我们可以删除c未被访问这一限制:
规定:a<b, c<b,那么递推式就可以写成f(a,b)=max{f(a,c)+1 | b,c连通}
同时,(1). f(a,b)=f(b,a),(2).f(a,a)在a不为1时是不被允许的(两条路径在端点外不允许相交)保证了我们仍然可以覆盖所有的状态集合。
删除了访问的限制后,该问题就具有最优子结构了,因此可以用动态规划解决。

另外,这题还可以用最大费用最大流解决,把每个点P裂成两个点Pa,Pb。Pa和Pb之间连一条有向边,费用为1,流量为1。如果原图中两个点P和Q(Q在P的东边)是相连的,那么就在Pb和Qa之间连一条有向边,费用为0,流量为1。因为起点S和终点E需要被访问两次,因此,Sa和Sb,Ea和Eb之间的边流量为2,费用为1。这样求从Sa到Eb的最大流即可。


三 代码

运行结果:
USER: Qi Shen [maxkibb3]
TASK: tour
LANG: C++

Compiling...
Compile: OK

Executing...
   Test 1: TEST OK [0.000 secs, 4240 KB]
   Test 2: TEST OK [0.000 secs, 4240 KB]
   Test 3: TEST OK [0.000 secs, 4240 KB]
   Test 4: TEST OK [0.000 secs, 4240 KB]
   Test 5: TEST OK [0.000 secs, 4240 KB]
   Test 6: TEST OK [0.000 secs, 4240 KB]
   Test 7: TEST OK [0.000 secs, 4240 KB]
   Test 8: TEST OK [0.000 secs, 4240 KB]
   Test 9: TEST OK [0.000 secs, 4240 KB]
   Test 10: TEST OK [0.000 secs, 4240 KB]
   Test 11: TEST OK [0.000 secs, 4240 KB]

All tests OK.

YOUR PROGRAM ('tour') WORKED FIRST TIME! That's fantastic -- and a rare thing. Please accept these special automated congratulations.



AC代码:
/*
ID:maxkibb3
LANG:C++
PROB:tour
*/

#include<iostream>
#include<fstream>
#include<cstring>
#include<map>
using namespace std;

const int MAXN = 105;
const int INF = 0x7fffffff;

ifstream fin;
ofstream fout;

int N, V;
map<string, int> City;
bool Graph[MAXN][MAXN];
int Dp[MAXN][MAXN];

void init() {
    fin.open("tour.in");
    fout.open("tour.out");
    fin >> N >> V;
    string c;
    for(int i = 1; i <= N; i++) {
        fin >> c;
        City[c] = i;
    }
    string c1, c2;
    for(int i = 0; i < V; i++) {
        fin >> c1 >> c2;
        int i1 = City[c1];
        int i2 = City[c2];
        Graph[i1][i2] = Graph[i2][i1] = true;
    }
}

void solve() {
    Dp[1][1] = 1;
    for(int i = 1; i < N; i++) {
        for(int j = i + 1; j <= N; j++) {
            Dp[i][j] = -INF;
            for(int k = 1; k < j; k++) {
                if(!Graph[k][j]) continue;
                if(Dp[i][k] != 0 && Dp[i][k] + 1 > Dp[i][j])
                    Dp[i][j] = Dp[i][k] + 1;
            }
            Dp[j][i] = Dp[i][j];
        }
    }
    int ans = 1;
    for(int i = 1; i < N; i++) {
        if(Graph[i][N] && Dp[i][N] > ans)
            ans = Dp[i][N];
    }
    fout << ans << endl;
}

int main() {
    init();
    solve();
    return 0;
}



Nvidia Orin Driveos Camera 介绍及调试详解 自动驾驶-nvidia orin driveos Camera 驱动详解及调试 阅读详情

相关推荐

vivado生成及调用自定义IP的方法

开发环境:vivado 2018.2 1.将整个工程封装为自定义IP 将整个工程封装为自定义IP主要有以下步骤: 步骤1.选中工程中的top模块。点击Tools ------> Create and Package New IP,如图1所示 图1 步骤2.弹出界面后,点击next至图2界面,选择Package your current project,然后继续点击next 图2 步骤3.选择生成的IP路径,如图3所示。这个路径就是后续添加该IP的路径 图3 步骤4.继续点击next,然后选择fi

进击的阿日比 4730

LeetCode第 187 场周赛(C++)

1、旅行终点站(3分) 题目描述 给你一份旅游线路图,该线路图中的旅行线路用数组 paths表示,其中 paths[i] = [cityAi, cityBi]表示该线路将会从 cityAi直接前往 cityBi。请你找出这次旅行的终点站,即没有任何可以通往其他城市的线路的城市。 题目数据保证线路图会形成一条不存在循环的线路,因此只会有一个旅行终点站。 示例 1: 输入:paths = [["Lon...

bwqiang的博客 367

光模块的封装工艺有哪些?

COB封装传统的单路10Gb/s或25Gb/s速率的光模块采用SFP封装将电芯片和TO封装的光收发组件焊接到PCB板上组成光模块。但对于40G及以上速率的高速光模块,受激光器速率限制(多为25G),主要通过多通道并行实现,如40G由4×10G实现,而100G则由4×25G实现。蝶形封装:壳体通常为长方体,结构及实现功能通常比较复杂,可以内置制冷器、热沉、陶瓷基块、芯片、热敏电阻、背光监控,并且可以支持所有以上部件的键合引线。BOX封装属于蝶形封装的一种,用于多通道并行封装。

WaytoICT- Explore ICT Technology, Build Your Tech Path 3809

洛谷P2747 [USACO5.4]周游加拿大Canada Tour

题目描述你赢得了一场航空公司举办的比赛,奖品是一张加拿大环游机票。旅行在这家航空公司开放的最西边的城市开始,然后一直自西向东旅行,直到你到达最东边的城市,再由东向西返回,直到你回到开始的城市。除了旅行开始的城市之外,每个城市只能访问一次,因为开始的城市必定要被访问两次(在旅行的开始和结束)。当然不允许使用其他公司的航线或者用其他的交通工具。给出这个航空公司开放的城市的列表,和两两城市之间的直达航线列

苦鬼·。 653

ffmpeg在windows的安装、合并、切片、.m4s、.m3u8处理

自己处理视频,我用的工具是 ffmpeg,因为涉及到.m3u8格式和.m4s格式的一些操作。ffmpeg的介绍我就不多说了,这里是它的官网地址: https://ffmpeg.org/ ,这里是文档: https://ffmpeg.org/documentation.html (看的头大,没咋看下去)...

一只爱吃糖的小羊 2689

OpenHarmony v4.1 Release设置应用随系统自动启动

OpenHarmony 4.1 版本中的 Ability Manager Service (AMS) 提供了应用自启动管理功能,允许系统控制哪些应用可以在系统启动时自动运行。这需要以下两个主要步骤:启用系统的自启动管理支持开发一个系统应用来管理自启动配置。

afufufufu的博客 1899

Canada Tour

题意:摘自NOCOW翻译(http://www.nocow.cn/index.php/Translate:USACO/latin) 描述 一种正方形的数字编排 1 2 3 4 5 2 1 4 5 3 3 4 5 1 2 4 5 2 3 1 5 3 1 2 4 是一个5×5的拉丁幻方,即每个1到5的整数在每行每列都出现且出现一次。 斜体文字 写个程序计算N×N的的拉丁幻方的总数

原味 616

数理金融学笔记 Chap2 二叉树模型Binomial

2 二叉树模型与期权定价 Binomial Model and Option Pricing 文章目录2 二叉树模型与期权定价 Binomial Model and Option Pricing单期二叉树模型 One-step Binomial Model风险与无风险资产单期二叉树模型与无套利条件无套利定价 No Arbitrage Pricing风险中性定价 Risk Neutral PricingDelta套期保值 Delta Hedging两期二叉树模型 Two-Step Binomial Model

weixin_66831131的博客 2387

USACO5.4.1 Canada Tour (tour)

可以看做从起点出发走两条线到终点。 dp[i][j]表示第一条线走到i,第二条线走到j的最多经过的城市数。 枚举max(i,j)之后的每一个城市k,下一步可以i走到k也可以j走到k。 dp[i][k] = max(dp[i][k], dp[i][j] + 1) dp[k][j] = max(dp[k][j], dp[i][j] + 1)/* ID:shijiey1 PROG:tour LA

Shion的专栏 599

代谢组数据分析(二十一):通过MetaboAnalystR标准化构建sPLSDA预测模型

本文介绍了如何使用R语言中的MetaboAnalystR包和mixOmics包进行代谢组学数据的标准化和sPLSDA分析。MetaboAnalystR包用于数据预处理,包括数据初始化、清洗、补足、过滤和标准化等步骤,以确保数据质量。mixOmics包则用于sPLSDA分析,通过Lasso惩罚进行变量选择,并建立分类模型。文章详细说明了安装和加载相关R包的步骤,并提供了数据导入和预处理的代码示例。最后,强调了数据预处理的重要性,以确保后续分析的准确性和可靠性。

专注生信领域 2426

Windows 10 本地硬盘变成了可弹出磁盘

今天新装了系统, 电脑是一个SSD+HHD, 没想到装好之后右下角显示可安全删除设备, 两个硬盘在那里. 这还得了. 查了一下午, 大致知道了是什么问题. Standard SATA AHCI controller使用高性能的硬盘模式就会把硬盘看作是一个可热插拔的存储器, 所以自然就会显示可弹出. 如果你的BIOS支持关闭HotSwap或者HotPlug, 那么直接关闭就可以了. 或者你直接在BIOS里把磁盘模式改为IDE, 不过这样就发挥不好你SSD的高性能了. 还有一种解决方法, 就是手动让系统把这两个

落日之城 4万+

USACO 5.4&&5.5解题报告

Canada Tour题目翻译:http://www.nocow.cn/index.php/Translate:USACO/tour可以视为两个人同时从起点出发,中间不相交,最终到终点时两人走过的城市数量的和的最大值。f[i][j]表示甲到达i城市,乙到达j城市时的城市数量和,则: f[i][j]=f[j][i]=max{f[i][k]}+1(k,j之间相连) ans=max{f[i][n]}(

SmallSXJ的博客 608

【DeepSeek R1构建本地RAG知识库】数据结构化清洗-工作流自动清洗

在构建本地RAG知识库时,数据结构化清洗是关键但繁琐的步骤。传统方法效率低且易出错,而低代码/无代码平台如Dify提供了更高效的解决方案。Dify通过可视化工作流设计,集成大模型智能处理,支持多格式输入输出,无需编码即可完成复杂的数据清洗任务。文章详细介绍了数据结构化的核心困境、目标、价值及类型,并比较了TXT与Markdown在RAG系统中的适用性。最后,通过Dify平台实战演示了如何在20分钟内完成规则制度文档的结构化清洗,输出标准化数据,展示了自动化工作流在数据处理中的高效性和便捷性。

少说,多做 1222

C++&Python——【USACO 5.4.1】——Canada Tour

Canada Tour You have won a contest sponsored by an airline. The prize is a ticket to travel around Canada, beginning in the most western point served by this airline, then traveling only from wes

McDonnell_Douglas的博客 1661

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

USACO5.4.1 Canada Tour(tour)

这道题刚开始搜索加各种优化还是超时,题中所说的只能自西向东定向旅行,实际上取消了该题的后效性,可以用动态规划来做。把返回的路线反向,假定有两个人分别从起点到终点进行旅行,那么整条路线就变成了两条不相交的从起点到终点的路线。 设dp[ i ][ j ]为假定的甲乙两人,甲走到第i个城市,乙走到第j个城市时,两人走过的城市数目的和。(初始时dp[1][1]=1) 状态转移方程:dp[ j

xsy_victory的专栏 395

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

【USACO 5.4.1】Canada Tour

题目大意   给出一个序列,序列中的每个元素是一个字符串。然后输入哪些元素可以互相到达。计算可以到达城市最多这样的一条路径,从序列开始的元素到达序列末端元素,再从序列末端元素返回序列开始元素,这条路径中所到达的元素不能重复(除起点外)。序列最长是100. 题解   明显我们可以发现这样的一件事:从起点到达终点和从终点到达起点并没有什么不同。   所以,现在我们考虑两条从起点到达终点并且不相...

weixin_30664539的博客 159

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

USACO5.4 周游加拿大 Canada Tour

周游加拿大 描述

MOEShimmer的博客 873

[USACO5.4]周游加拿大Canada Tour

动态规划+字符串处理 传送门(洛谷) 题目描述: 此题可以看成从最左边到最右边,再从右边走回左边。故我们可以看成两个人一个从左到右,一个从右到左,因此设此状态:f[i][j]表示左边的人到i号城市时和右边的人到j号城市时所走过的总城市数目 此外,用一个map处理字符串,为了方便判断两个城市是否有飞机相连 转移方程式: if(a[j][k] && f[i][k]) //如果有...

便当口袋 2529

Usaco Training Section 5.4 Canada Tour

从点1到点n,只能从小的点往大的点走;再从点n到点1,只能从大的点往小的点走。除点1外,任何点不能经过2次。问最多能到多少个点? 一上来,什么也没想,写了个暴力,11个点过了前7个点。 #include&lt;bits/stdc++.h&gt; #define ll long long #define ull unsigned long long #define inf 2147483647...

Monster的博客 320

【luogu2747】 [USACO5.4]周游加拿大Canada Tour[动态规划]

P2747[USACO5.4]周游加拿大Canada Tour 就记得f[1][1]的时候要初始化为1 忘了ans也要设为1 直接弄的0美滋滋 把它看作两个人同时从左边出发 然后dp就好了 可以去了gai一下floyd求最大环,最小环 和这题还是有点区别 1 #include<bits/stdc++.h> 2 using namespace std; 3 #def...

weixin_30741653的博客 431

[洛谷P2747] [USACO5.4]周游加拿大Canada Tour

洛谷题目链接:[USACO5.4]周游加拿大Canada Tour 题目描述 你赢得了一场航空公司举办的比赛,奖品是一张加拿大环游机票。旅行在这家航空公司开放的最西边的城市开始,然后一直自西向东旅行,直到你到达最东边的城市,再由东向西返回,直到你回到开始的城市。除了旅行开始的城市之外,每个城市只能访问一次,因为开始的城市必定要被访问两次(在旅行的开始和结束)。 当然不允许使用其他公司的航...

dengtun2502的博客 527

双调TSP问题总结---poj 2677和usaco5.4 canada tour

双调TSP指的就是从最左边的城市出发,从左往右遍历一些城市,到达最右端,再从最右端从右往左返回出发城市,然后最优化某些东西。 poj 2677 就是要遍历所有的城市,最小化行走的距离(欧几里德距离) usaco canada tour 就是每个城市最多遍历一次(出发点两次),最大化遍历的城市数量。 【解答】 显然从左往右,从右往左都是一样的,都可以变成从左往右。我们称前者为上行路线,后者为

AChunter的专栏 2927

题解Luogu P2747 [USACO5.4]周游加拿大Canada Tour

Lg P2747 [USACO5.4]周游加拿大Canada Tour 加拿大旅游 (tour.cpp/in/out) 题目描述 你赢得了一场航空公司举办的比赛,奖品是一张加拿大环游机票。旅行在这家航空公司开放的最西边的城市开始,然后一直自西向东旅行,直到你到达最东边的城市,再由东向西返回,直到你回到开始的城市。除了旅行开始的城市之外,每个城市只能访问一次,因为开始的城市必定要被访问两次(在旅...

EPSILON的博客 737

洛谷 P2747 [USACO5.4]周游加拿大Canada Tour

P2747 [USACO5.4]周游加拿大Canada Tour 题目描述 你赢得了一场航空公司举办的比赛,奖品是一张加拿大环游机票。旅行在这家航空公司开放的最西边的城市开始,然后一直自西向东旅行,直到你到达最东边的城市,再由东向西返回,直到你回到开始的城市。除了旅行开始的城市之外,每个城市只能访问一次,因为开始的城市必定要被访问两次(在旅行的开始和结...

HJ921004的博客 141

USACO Section 5.4 Canada Tour

题意: 有向图上从起点到终点的两条路径的bu

House 860

usaco 5.4 Canada Tour(双线程DP)

Canada Tour You have won a contest sponsored by an airline. The prize is a ticket to travel around Canada, beginning in the most western point served by this airline, then traveling only from west

志当存高远 1107
上一篇: usaco5.3.4 Big Barn
下一篇: usaco5.4.2 Character Recognition
max_kibble
博客等级 码龄11年 2粉丝 110原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值