#!/usr/bin/perl
use strict;
use warnings;
use Data::Dumper;
my @stations = ([2,7,9,3,4,8,4,3], [4,8,5,6,4,5,7,2] ); # 0,1,2,3,4,5,6,7
my @transfer = ([2,3,1,3,4], [2,1,2,2,1] ); # 0,1,2,3,4,5
my (@fastway, @line);
($fastway[0][0], $fastway[0][1]) = ($stations[0][0], $stations[0][0]+$stations[0][1] );
($fastway[1][0], $fastway[1][1]) = ($stations[1][0], $stations[1][0]+$stations[1][1] );
($line[0][0], $line[0][1]) = (0,0);
($line[1][0], $line[1][1]) = (1,1);
for( my $i=2; $i<=6; $i++ ){
# for line one
if( $fastway[0][$i-1] <= $fastway[1][$i-1] + $transfer[1][$i-2] ){
$fastway[0][$i] = $fastway[0][$i-1] + $stations[0][$i];
$line[0][$i] = 0;
}else{
$fastway[0][$i] = $fastway[1][$i-1] + $transfer[1][$i-2] + $stations[0][$i];
$line[0][$i] = 1;
}
# for line two
if( $fastway[1][$i-1] <= $fastway[0][$i-1] + $transfer[0][$i-2] ){
$fastway[1][$i] = $fastway[1][$i-1] + $stations[1][$i];
$line[1][$i] = 1;
}else{
$fastway[1][$i] = $fastway[0][$i-1] + $transfer[0][$i-2] + $stations[1][$i];
$line[1][$i] = 0;
}
}
$fastway[0][7] = $fastway[0][6] + $stations[0][7];
$fastway[1][7] = $fastway[1][6] + $stations[1][7];
my $line = 0;
$line[$line][7] = $line;
$line[$line][7] = $line = 1 if( $fastway[0][7] >= $fastway[1][7] );
print "StepMarker\tStations\tTimeCost\n";
for( my $i=0; $i<8; $i++ ){
my $index;
if( $i==0 ) {
$index = "EnterTimeCost";
}elsif( $i==7 ) {
$index = "TotalTimecost";
}else{
$index = "FinishStation";
}
print join("\t", "$index$i", $line[$line][$i]+1, $fastway[$line][$i], "\n" );
}
stations = [[2,7,9,3,4,8,4,3], [4,8,5,6,4,5,7,2]] transfer = [[2,3,1,3,4], [2,1,2,2,1]] fastway = [ [stations[0][0], stations[0][0]+stations[0][1]], [stations[1][0], stations[1][0]+stations[1][1]] ] line = [ [0,0], [1,1] ] for i in range(2,7): # for line one if fastway[0][i-1] <= (fastway[1][i-1] + transfer[1][i-2]): fastway[0].append( fastway[0][i-1] + stations[0][i] ) line[0].append( 0 ) else: fastway[0].append( fastway[1][i-1] + transfer[1][i-2] + stations[0][i] ) line[0].append( 1 ) #for line two if fastway[1][i-1] <= (fastway[0][i-1] + transfer[0][i-2]): fastway[1].append( fastway[1][i-1] + stations[1][i] ) line[1].append( 1 ) else: fastway[1].append( fastway[0][i-1] + transfer[0][i-2] + stations[1][i] ) line[1].append( 0 ) fastway[0].append( fastway[0][6] + stations[0][7] ) fastway[1].append( fastway[1][6] + stations[1][7] ) li = 0 line[li].append( 0 ) if fastway[0][7] >= fastway[1][7]: li = 1 line[li].append( 1 ) print "StepMarker\tStations\tTimeCost" for i in range(8): if i==0: index = "EnterTimeCost" elif i==7: index = "TotalTimecost" else: index = "FinishStation" print ‘%s%d\t%d\t%d‘ % (index, i, line[li][i]+1, fastway[li][i])
A Simple Example of Dynamic Programming using perl scripts,布布扣,bubuko.com
A Simple Example of Dynamic Programming using perl scripts
原文:http://blog.csdn.net/bangemantou/article/details/20210705