- 7
- 0
- 约2.34千字
- 约 6页
- 2017-11-26 发布于河南
- 举报
周游加拿大 Canada Tour
周游加拿大 Canada Tour
从东至西有m个城市,其中某些城市之间有航班,让你从最东边的城市出发,坐航班每次只能向西走,走到最西边之后再往回走到最东边的城市(除了两端的城市,其他城市只能经过一次),使得经过的城市数量尽可能多。
(东至西至东==两个人同时向西走且经过的城市不相同)
设f[i,j]表示从起点出发,一个人到达i,另一个人到达j时经过的城市数。
状态设定f[i,j] 为假定的甲乙两人,甲走到第i个城市,乙走到第j个城市时,两人走过的城市数目的和。
初始状态f[1,1]=1
状态转移方程f[i,j]=max{f[i,k]+1}(k到j存在飞机航线,1=kJ)交换甲乙,则肯定有f[j,i]=f[i,j]。
因为f[i,j]=f[j,i],所以我们限制ij。
分析状态(i,j),它可能是(k,j)(jki)中k到达i得到(方式1),也可能是(j,k)(kj)中k超过j到达i得到(方式2)。
但它不能是(i,k)(kj)中k到达j得到,因为这样可能会出现重复路径。即使不会出现重复路径,那么它由(j,k)通过方式2同样可以得到,所以不会遗漏解。
目标结果由于题中告知必须走到终点才能返回,输出结果一定是max{f[i,N]}(i到N存在飞机航线)。时间复杂度O(n3)
如果没有经过城市数目大于1的可行目标状态,则无法完成这次环游,输出1。
这是加拿大IOI93的一道原
原创力文档

文档评论(0)