LeetCode 1066キャンパスバイクII

バックトレース+剪定(TLE)

最も簡単な解決策は、バックトレースが、剪定、または時間外であっても追加です。

クラスのソリューション{
 パブリックint型 min_dist = INT_MAX。
        
    INT assignBikes(ベクトル<ベクトル< INT >>&労働者、ベクトル<ベクトル< INT >>&バイク){ 
        ベクトル < BOOL > bikeUsed(bikes.size()、)。
        DFS(労働者、自転車、0、bikeUsed、0 );
        リターンmin_dist。
    } 
    
    //は私の従業員に自転車を割り当てる
     DFS(ベクトル<ベクトル< int型 >>&労働者、ベクトル<ベクトル< int型、>>&バイクBOOL >&bikeUsed、int型の合計){
         場合(I == workers.size()){ 
            min_dist = 分(min_dist、合計)。
            返します
        } 
        であれば(和> min_dist)のリターン ; // プルーニング
        
        ためINT J = 0 ; J <bikes.size(); ++ J){
             場合(bikeUsed [J])を続けます
            bikeUsed [J] = ; 
            DFS(労働者、自転車、I + 1、bikeUsed、和+ DIST(研究者[I]、自転車[J]))。 
            bikeUsed [J] = ; 
        } 
    } 
    
    int型 DIST(ベクトル< 整数 >ワーカー、ベクトル< INT > 自転車){
         戻り ABS(ワーカー[ 0 ] [-bike 0 ])+ ABS(ワーカー[ 1 ] -bike [ 1 ])。
    } 
}。

 

 

 

参照

https://leetcode.com/problems/campus-bikes-ii/discuss/305218/DFS-+-Pruning-And-DP-Solution

https://leetcode.com/problems/campus-bikes-ii/discuss/320683/Java-7ms-DFS-+-Memorization-Solution-Beats-97

おすすめ

転載: www.cnblogs.com/hankunyan/p/11261779.html