結果

提出番号 2442
提出者 keko33
言語 C++
提出日時 2023-05-13 16:47:21
問題名 (70)アルゴリズムのお勉強
結果 WA
点数 0%

テストケース

テストケース 結果 得点 実行時間 メモリ使用量
1 WA 0% 2ms 7824KB
2 WA 0% 2ms 7840KB
3 WA 0% 2ms 8336KB
4 WA 0% 2ms 8208KB
5 WA 0% 2ms 8128KB
6 WA 0% 2ms 7840KB
7 WA 0% 2ms 7760KB
8 WA 0% 2ms 8128KB
9 WA 0% 2ms 8224KB
10 WA 0% 2ms 8128KB
11 WA 0% 3ms 8160KB
12 WA 0% 3ms 8224KB
13 WA 0% 4ms 8112KB
14 WA 0% 2ms 8112KB
15 WA 0% 3ms 8112KB
16 WA 0% 2ms 7824KB
17 WA 0% 2ms 8112KB
18 WA 0% 2ms 7824KB
19 WA 0% 6ms 8256KB
20 WA 0% 6ms 8160KB
21 WA 0% 2ms 8336KB
22 WA 0% 12ms 8096KB
23 WA 0% 2ms 7840KB
24 WA 0% 23ms 10032KB
25 WA 0% 6ms 7872KB
26 WA 0% 11ms 7888KB
27 WA 0% 29ms 10032KB
28 WA 0% 6ms 8048KB
29 WA 0% 115ms 25392KB
30 WA 0% 11ms 8304KB

ソースコード

#include <bits/stdc++.h>

using namespace std;

using ll = long long;
using ld = long double;

#define rep(i, h) for(int i = 0; i < (h); ++i)
#define reps(i, s, h) for(int i = (s); i < (h); ++i)
#define rrep(i, s, h) for(int i = (s); i >= (h); --i)
#define vi vector<int>
#define vl vector<ll>
#define pl pair<ll, ll>
#define all(v) (v).begin(), (v).end()

template <class T> void chmin(T &v, T b) {
    if(v > b)
        v = b;
}
template <class T> void chmax(T &v, T b) {
    if(v < b)
        v = b;
}

const ll inf = LONG_LONG_MAX / 2;
const int mod = 1e9 + 7;
const int MAX = 1e6 + 5;

ll n;
ll dc[20][20];
ll dp[MAX][20];
ll t[20];

string bitDisp(ll n) {
    bitset<8> bs(n);
    return bs.to_string();
}

ll rec(ll s, ll cur) {

    string str = bitDisp(s);

    if(s == 0) {
        if(cur == 0) {
            return 0;
        } else {
            return inf;
        }
    }

    if((s & (1 << cur)) == 0) {
        return inf;
    }

    ll &ret = dp[s][cur];
    if(ret != 0)
        return ret;

    ret = inf;
    rep(nx, n) {
        ll rtn = rec(s ^ (1 << cur), nx) + t[cur] - dc[cur][nx];
        ret = min(ret, rtn);
    }
    return ret;
}

int main() {

    cin >> n;

    rep(i, n) cin >> t[i];

    rep(i, n) {
        rep(j, n) { cin >> dc[i][j]; }
    }

    ll ans = rec((1 << n) - 1, 0);

    cout << ans << endl;

    return 0;
}