/* -*- coding: utf-8 -*- * * 357.cc: No.357 品物の並び替え (Middle) - yukicoder */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; /* constant */ const int MAX_N = 14; const int NBITS = 1 << MAX_N; /* typedef */ /* global variables */ int scs[MAX_N][MAX_N]; int dp[NBITS]; /* subroutines */ /* main */ int main() { int n, m; cin >> n >> m; for (int i = 0; i < m; i++) { int it0, it1, sc; cin >> it0 >> it1 >> sc; scs[it0][it1] = sc; } memset(dp, -1, sizeof(dp)); dp[0] = 0; int nbits = 1 << n; for (int bits = 0; bits < nbits; bits++) if (dp[bits] >= 0) for (int i = 0, bi = 1; i < n; i++, bi <<= 1) if (! (bits & bi)) { int bitsi = bits | bi; int sum = dp[bits]; for (int j = 0, bj = 1; j < n; j++, bj <<= 1) if (bits & bj) sum += scs[j][i]; if (dp[bitsi] < sum) dp[bitsi] = sum; } printf("%d\n", dp[nbits - 1]); return 0; }