#include #include #include using namespace std; vector>> scores; vector dp; int mask; int solve(int bit, int n) { if ((bit ^ mask) == 0) { return 0; } if (dp[bit] != -1) { return dp[bit]; } dp[bit] = 0; for (int i = 0; i < n; i++) { if ((bit >> i) & 1) continue; int sum = 0; for (const auto& pair : scores[i]) { if ((bit >> pair.first) & 1) { sum += pair.second; } } dp[bit] = max(dp[bit], sum + solve(bit | 1 << i, n)); } return dp[bit]; } int main() { int n, m; cin >> n >> m; scores.resize(n); for (int i = 0; i < m; i++) { int item1, item2, score; cin >> item1 >> item2 >> score; scores[item1].emplace_back(item2, score); } dp.resize(1 << n, -1); mask = 0; for (int i = 0; i < n; i++) { mask = mask << i | 1; } cout << solve(0, n) << endl; return 0; }