#include #include #include using namespace std; int main() { int N, M; cin >> N >> M; vector> table; for( int i = 0; i < N; i++ ) { table.push_back( vector( N ) ); } for( int i = 0; i < M; i++ ) { int f, t, v; cin >> f >> t >> v; table[ f ][ t ] = v; } const int S = 1 << N; // best[使ってる集合] vector best( S ); fill( best.begin(), best.end(), 0 ); for( int i = 0; i < S - 1; i++ ) { for( int j = 0; j < N; j++ ) // 今から追加する桁 { if ( !( i & ( 1 << j ) ) ) { int sub_score = 0; for( int k = 0; k < N; k++ ) // 既にある桁 { if ( i & ( 1 << k ) ) { sub_score += table[ k ][ j ]; } } best[ i + (1 << j) ] = max( best[ i + (1 << j) ], best[ i ] + sub_score ); } } } cout << best[ S - 1 ] << endl; }