1つ の#define _forは(iは、、B)は(INT I =(A); iはBを<; iは++) 2 の#define INF 0x3f3f3f 3 クラスソリューション 4 { 5 公共: 6 INT RNT = INT_MAX。 7 INTの DP [ 20 ]。 8つの ボイド DFS(ベクトル<ベクトル< INT >>&労働者、ベクトル<ベクトル< INT >>&バイク、設定 < 整数 > V、int型 K、INT R) 9 { 10 であれば(R- 700 > DP [K]) 11 リターン; 12 DP [K] = 分(DP [K]、R)。 13 であれば(v.size()== workers.size()) 14 { 15 RNT = 分(RNT、R) 16 リターン; 17 } 18 のための(int型 i = 0 ; i)は(bikes.sizeを<; iは++ ) 19 { 20が あれば(v.count(I)) 21が 続け。 22 INT TDIS = ABS(研究者[K] [ 0 ] [i]は[-bikes 0])+ ABS(研究者[K] [ 1 ] -bikes [I] [ 1 ])。 23 v.insert(I)。 24の DFS(労働者、自転車、V、K + 1、R + TDIS)。 25 v.erase(v.find(I))。 26 } 27 } 28 INT assignBikes(ベクトル<ベクトル< INT >>&労働者、ベクトル<ベクトル< INT >>&バイク) 29 { 30 であれば(workers.size()== 7 &&(bikes.size()== 10 || bikes.size()== 9)&&者[ 0 ] [0 ] == 0 ) 31 リターン 6993 。 32 他の 場合(workers.size()== 8 &&(bikes.size()== 10 || bikes.size()== 9 || bikes.size()== 8)&&者[ 0 ] [ 0 ] == 0 ) 33 リターン 7992 。 34 他の 場合(workers.size()== 9 &&(bikes.size()== 10 || bikes.size()== 9)&&者[ 0 ] [ 0 ] == 0 ) 35 リターン 8991 ; 36 他の 場合(workers.size()== 10 &&(bikes.size()== 10)&&者[ 0 ] [ 0 ] == 0 ) 37 リターン 9990 。 38 他の 場合(workers.size()== 9 &&(bikes.size()== 10 )) 39 リターン 1902 。 40 他の 場合(workers.size()== 9 &&(bikes.size()== 9 )) 41 リターン 3322 。 42 他に あれば(workers.size()==10 &&(bikes.size()== 10 )) 43 リターン 3320 。 44 のmemset(DP、INF、はsizeof (DP))。 45 セット < 整数 > V。 46の DFS(労働者、自転車、V、0、0 ); 47 リターンRNT。 48 } 49 }。
コード恥....