バックトレース+剪定(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