codevs4438 YJQ Runs Upstairs
题目描述 Description
学校科技楼一共有N层,而神犇YJQ每天都在科技楼N楼的机房写代码。这天,他准备从科技楼1楼爬到N楼。有个M连接不同楼层的楼梯,爬每个楼梯需要一定的体力值。楼梯一定是从低处通往高处的。(但是由于楼房的设计比较奇怪,第i楼并不一定在第i-1楼上面,也就是说给出的边不保证x<y,但保证图为DAG,请自行处理楼层之间的高度关系)。为了省时间,YJQ一定只会上楼梯而不会下楼梯,即楼梯间不会形成环路。而且出于人性化考虑,不管YJQ选择什么路线上楼,他爬的楼梯数量一定小于20。为了使体力消耗尽量平稳,YJQ需要选择一条“每个楼梯消耗体力值的方差最小”的路径上楼。请帮助YJQ计算出这个最小方差。
输入描述 Input Description
第一行包含2个整数N,M表示科技楼楼层数和楼梯数; 接下来M行,每行3个数,x,y,z表示存在一条由x层通往平台y层的楼梯,爬这个楼梯需要消耗z的体力值。
输出描述 Output Description
一行1个实数,表示最小方差,精确到小数点后4位。
样例输入 Sample Input
4 4 1 2 1 2 4 3 1 3 2 3 4 3
样例输出 Sample Output
0.2500
数据范围及提示 Data Size & Hint
对于30%的数据,N<=10,M<=20;
另有20%的数据N<=35,M<=220,Z∈0,1;
对于100%的数据2<=N<=50,M<=300,0<=Z<=50保证至少存在一条由1到N的路径。
s^2=((x1^2+x2^2+……+xn^2)-2*x*(x1+x2+……+xn)+n*x^2) / n
因为上式分子>=0,只要知道n与tot,x=tot/n。所以按照状态spfa,求出每个状态 f[i=当前点][j=第几步][k=路径长度和tot]=最小平方和
在i=n时,直接处理更新ans值