結果
問題 | No.357 品物の並び替え (Middle) |
ユーザー |
|
提出日時 | 2022-01-14 15:53:59 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 12 ms / 5,000 ms |
コード長 | 3,078 bytes |
コンパイル時間 | 3,220 ms |
コンパイル使用メモリ | 226,856 KB |
最終ジャッジ日時 | 2025-01-27 10:47:00 |
ジャッジサーバーID (参考情報) |
judge4 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 18 |
ソースコード
#include <bits/stdc++.h>using namespace std;#include <atcoder/convolution>#include <atcoder/modint>using namespace atcoder;//基本的にこれがなくてもうまくいくコードを心がけるが、念の為。時間ギリギリアウトの時は消してみる#define int long longtypedef long long ll;typedef unsigned long long ull;typedef double db;typedef long double ldb;typedef pair<int, int> pi;typedef pair<long long, long long> pl;typedef vector<int> vi;typedef vector<long long> vl;typedef vector<vector<int> > vvi;typedef vector<vector<long long> > vvl;typedef priority_queue<int> pq;typedef priority_queue<int, vector<int>, greater<int> > pqg;typedef priority_queue<long long> pql;typedef priority_queue<long long, vector<long long>, greater<long long> > pqgl;#define pb push_back#define eb emplace_back#define mp make_pair#define all(obj) (obj).begin(), (obj).end()#define reps(i, n, m) for (int i = (int)(n); i < (int)(m); i++)#define rep(i, n) for (int i = 0; i < (int)(n); i++)#define rrep(i, n) for (int i = n; i >= 0; i--)#define cbit(x) __builtin_popcountll(x)#define minv(v) *min_element(v.begin(), v.end())#define maxv(v) *max_element(v.begin(), v.end())#define print(v) \for (auto k : v) cout << k << " "; \cout << endl;#define yesno(bool) \if (bool) { \cout << "Yes" << endl; \} else { \cout << "No" << endl; \}//既存値aより新規値bが大きければ更新template <class T>bool chmax(T &a, const T &b) {if (a < b) {a = b;return 1;}return 0;}//既存値aより新規値bが小さければ更新template <class T>bool chmin(T &a, const T &b) {if (b < a) {a = b;return 1;}return 0;}#define ednl endl //打ち間違え用#define enld endl#define Endl endlint dx[4] = {1, 0, -1, 0};int dy[4] = {0, 1, 0, -1};// int dx[8] = {1, 1, 1, 0, -1, -1, -1, 0};// int dy[8] = {-1, 0, 1, 1, 1, 0, -1, -1};// const int MOD = 998244353; //素数(223*119+1)// const int MOD = 1000000007; //素数// using mint = modint998244353;// using mint = modint1000000007;// using mint = static_modint<1000000009>;////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////signed main() {int n, m;cin >> n >> m;vi i1(m), i2(m), score(m);vvi memo(n, vi(n));rep(i, m) {cin >> i1[i] >> i2[i] >> score[i];memo[i1[i]][i2[i]] += score[i];}vi d(1 << n);d[0] = 0;rep(i, 1 << n) {rep(j, n) {if (i & (1 << j)) {int s = 0;rep(k, n) {if (j != k && i & (1 << k)) {s += memo[k][j];}}d[i] = max(d[i], d[i & ~(1 << j)] + s);}}}cout << d[(1 << n) - 1] << endl;}