我的代码:版本升级

import java.util.ArrayList;

import java.util.Collections;

import java.util.Comparator;

import java.util.List;

import java.util.Scanner;



publicclass Main {

List < Node > finalList = new ArrayList <> () ;

int min = Integer .MAX_VALUE;


publicstaticvoid main ( String [] args ) {

Main main = new Main () ;

main. init () ;

}


privatevoid init () {

Scanner scanner = new Scanner ( System .in) ;

String [] first = scanner. nextLine () . split ( " " ) ;

int start = Integer . valueOf (first[ 0 ]) ;

int end = Integer . valueOf (first[ 1 ]) ;


List < Node > lists = new ArrayList <> () ;

while (scanner. hasNext ()) {

String [] now = scanner. nextLine () . split ( " " ) ;

Node node = new Node (Integer. valueOf ( now [ 0 ]) , Integer. valueOf ( now [ 1 ]) , Integer. valueOf ( now [ 2 ])) ;

lists. add (node) ;

}


solve (lists, start, end) ;

}


void solve ( List<Node> lists,int start,int end ) {


Collections .sort( lists , new NodeComp()) ;


List < Node > tmp = new ArrayList <> () ;


Node fir = new Node ( start , start , 0 ) ;

dfs (fir, lists , tmp, end , 0 , - 1 ) ;


// System.out.println(finalList);


if (finalList. size () != 0 ) {

StringBuffer sb = print (finalList) ;

sb. append ( "(" + min + ")" ) ;

System . out .println( sb .toString()) ;

}

}


private StringBuffer print (List< Node > list ) {

StringBuffer sb = new StringBuffer () ;

if ( list . size () == 0 ) {

sb. append ( list . get ( 0 ) .begin + "->" + list . get ( 0 ) .end) ;

} else {

sb. append ( list . get ( 0 ) .begin) ;

for ( int i = 0 ; i < list . size () ; i++ ) {

sb. append ( "->" ) ;

sb. append ( list . get (i) .end) ;

}

}

return sb;

}


privatevoid dfs ( Node cur, List<Node> lists, List<Node> tmp,int end,int curCost,int pos ) {

if ( cur .end > end || curCost > min)

return;

else if ( cur .end == end ) {

if ( curCost < min) {

min = curCost ;

finalList = new ArrayList <> ( tmp ) ;

}

} else {

for ( int i = pos + 1 ; i < lists . size () ; i++ ) {

Node node = lists . get (i) ;

if (node.begin == cur .end) {

tmp . add (node) ;

dfs (node, lists , tmp , end , curCost + node.cost, i) ;

tmp .remove( tmp .size() - 1 ) ;

} else if (node.begin > cur .end) {

break;

}

}

}

}


class NodeComp implements Comparator< Node > {


@Override

publicint compare ( Node o1, Node o2 ) {

if ( o1 .begin < o2 .begin)

return-1;

else if ( o1 .begin > o2 .begin)

return 1;

else

return 0;

}


}


class Node {

int begin;

int end;

int cost;


Node ( int begin, int end, int cost) {

this.begin = begin ;

this.end = end ;

this.cost = cost ;

}


@Override

public String toString() {

return begin + "," + end;

}

}

}