結果
問題 | No.1284 Flip Game |
ユーザー |
|
提出日時 | 2021-01-01 03:22:10 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 26 ms / 2,000 ms |
コード長 | 3,575 bytes |
コンパイル時間 | 2,148 ms |
コンパイル使用メモリ | 204,384 KB |
最終ジャッジ日時 | 2025-01-17 08:49:54 |
ジャッジサーバーID (参考情報) |
judge2 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 28 |
ソースコード
//#define _GLIBCXX_DEBUG#include <bits/stdc++.h>#define rep(i, n) for(int i=0; i<n; ++i)#define all(v) v.begin(), v.end()#define rall(v) v.rbegin(), v.rend()using namespace std;using ll = int64_t;using ld = long double;using P = pair<int, int>;using vs = vector<string>;using vi = vector<int>;using vvi = vector<vi>;template<class T> using PQ = priority_queue<T>;template<class T> using PQG = priority_queue<T, vector<T>, greater<T> >;const int INF = 0xccccccc;const ll LINF = 0xcccccccccccccccLL;template<typename T1, typename T2>inline bool chmax(T1 &a, T2 b) {return a < b && (a = b, true);}template<typename T1, typename T2>inline bool chmin(T1 &a, T2 b) {return a > b && (a = b, true);}template<typename T1, typename T2>istream &operator>>(istream &is, pair<T1, T2> &p) { return is >> p.first >> p.second;}template<typename T1, typename T2>ostream &operator<<(ostream &os, const pair<T1, T2> &p) { return os << p.first << ' ' << p.second;}#undef _GLIBCXX_DEBUGstring to_string(const string &s) {return '"' + s + '"';}string to_string(const char *s) {return to_string(string(s));}string to_string(bool b) {return b?"true":"false";}string to_string(vector<bool> v) {string res = "{";for(int i = 0; i < int(v.size()); i++) {if(i) res += ", ";res += to_string(v[i]);}res += "}";return res;}template<size_t N>string to_string(bitset<N> v) {string res;for(size_t i = 0; i < N; i++) res += char('0' + v[i]);return res;}template<class A, class B>string to_string(pair<A, B>);template<class A, class B, class C>string to_string(tuple<A, B, C>);template<class A, class B, class C, class D>string to_string(tuple<A, B, C, D>);template<class A>string to_string(A v) {bool first = true;string res = "{";for(const auto &x:v) {if(!first) res += ", ";first = false;res += to_string(x);}res += "}";return res;}template<class A, class B>string to_string(pair<A, B> p) {return "(" + to_string(p.first) + ", " + to_string(p.second) + ")";}template<class A, class B, class C>string to_string(tuple<A, B, C> t) {return "(" + to_string(get<0>(t)) + ", " + to_string(get<1>(t)) + ", " + to_string(get<2>(t)) + ")";}template<class A, class B, class C, class D>string to_string(tuple<A, B, C, D> t) {return "(" + to_string(get<0>(t)) + ", " + to_string(get<1>(t)) + ", " + to_string(get<2>(t)) + ", " + to_string(get<3>(t)) + ")";}void debug_out() {cerr << endl;}template<typename Head, typename... Tail>void debug_out(Head H, Tail... T) {cerr << ' ' << to_string(H);debug_out(T...);}#ifdef LOCAL#define debug(...) cerr << "[" << #__VA_ARGS__ << "]:", debug_out(__VA_ARGS__)#else#define debug(...) 822#endif//headint num(vi &u) {int res = 0;for(auto x:u) {res *= 3;res += x;}return res;}vi _num(int num, int n) {vi res(n);for(int i = n-1; i >= 0; i--) {res[i] = num%3;num /= 3;}return res;}int main() {ios::sync_with_stdio(false);cin.tie(0);int n;cin >> n;int nn = 1;rep(i, n) nn *= 3;vvi c(n+1, vi(n));rep(i, n) rep(j, n) cin >> c[i][j];vector<vector<ll>> dp(nn, vector<ll>(n+1, LINF));auto dfs = [&](auto self, int id, int pre)->ll{ll &res = dp[id][pre];if(res != LINF) return res;auto vec = _num(id, n);bool flg = false;rep(i, n) if(i != pre and vec[i] != 2) flg = true;if(!flg) {return res = 0;}rep(i, n) {if(pre == i or vec[i] == 2) continue;vec[i]++;int u = num(vec);vec[i]--;chmin(res, self(self, u, i)+c[pre][i]);}return res;};cout << dfs(dfs, 0, n) << endl;}