本文主要是介绍(JZ1274)2019.01.26【NOIP提高组】模拟B组 1.游历的路线,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
Description
我们的郭嘉大大经过一段时间发现了袁绍这个人干大事而惜身,见小利而忘义,又逢曹操在招兵买马,决定逃离袁绍去投曹操,而我们的曹操在第M天招募良材,我们的郭嘉大大既不能早去,也不能晚去,于是乎,他就趁着这一段时间到其他的城市游历一番,而每两个城市之间只能坐马车来往,由于我们的郭嘉大大很贪钱,他想用最少的费用,所以需要我们帮他求出这一个最小的费用。
Input
第一行包含两个数n,m, 表示有n个城市,和m天后曹操招纳良材。城市一就是郭嘉所在的城市,城市n就是曹操处。接下来n * (n – 1)行描述马车乘坐表。 第2到第n行就是描述的城市1到2… n的马车乘坐表. 第n + 1到第2n-1行描述的城市2到城市1,3…n的马车乘坐表… … 对每一行,首先有一个数T,表示城市I到城市J的马车以T为周期,接下来有T个数,表示每天的马车的价格,如果价格为0则表示没有马车可坐。(n <= 100, m <= 200, T <= 20, Price <= 50000)
Output
如果存在这样的路线使郭嘉第m天到达曹操处,则输出最少的费用,否则输出0!
Sample Input
3 5
2 130 150
3 75 0 80
2 110 100
4 60 70 60 50
3 0 135 140
2 70 80
Sample Output
355
题解:
本题是floyd
本题一定要先看懂题意,不要问我为什么,写了半天发现输入搞错了,又得重写ε=(´ο`*)))
题目的背景条件是郭嘉一直走,最后到m点,求最小代价。本题的输入是隐晦地告诉了我们,每个城市到另外所有城市的价格。为什么是隐晦呢,因为他只是把周期告诉了我们,把周期代入进数组就是我们要做的事啊!(也就是处理出各个城市间的代价数组a)
那么条件就明朗了,我们有两个状态:天数和城市。再看看数据范围:n <= 100, m <= 200,用floyd不会炸(如果数据够大的话,就得用spfa了)
我们设f[i][j]为在i天到城市j的最小代价。1个for天数,2个for城市,易得状态转移方程:f[i,j]:=min(f[i,j],f[k,j-1]+a[k,i,j])
vara:array[0..210,0..210,0..210] of longint;f:array
这篇关于(JZ1274)2019.01.26【NOIP提高组】模拟B组 1.游历的路线的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!