結果

提出番号 2453
提出者 aiueo
言語 C++
提出日時 2026-03-13 22:46:22
問題名 (70)アルゴリズムのお勉強
結果 WJ
点数 0%

テストケース

テストケース 結果 得点 実行時間 メモリ使用量
1 WJ 0% 0ms 0KB
2 WJ 0% 0ms 0KB
3 WJ 0% 0ms 0KB
4 WJ 0% 0ms 0KB
5 WJ 0% 0ms 0KB
6 WJ 0% 0ms 0KB
7 WJ 0% 0ms 0KB
8 WJ 0% 0ms 0KB
9 WJ 0% 0ms 0KB
10 WJ 0% 0ms 0KB
11 WJ 0% 0ms 0KB
12 WJ 0% 0ms 0KB
13 WJ 0% 0ms 0KB
14 WJ 0% 0ms 0KB
15 WJ 0% 0ms 0KB
16 WJ 0% 0ms 0KB
17 WJ 0% 0ms 0KB
18 WJ 0% 0ms 0KB
19 WJ 0% 0ms 0KB
20 WJ 0% 0ms 0KB
21 WJ 0% 0ms 0KB
22 WJ 0% 0ms 0KB
23 WJ 0% 0ms 0KB
24 WJ 0% 0ms 0KB
25 WJ 0% 0ms 0KB
26 WJ 0% 0ms 0KB
27 WJ 0% 0ms 0KB
28 WJ 0% 0ms 0KB
29 WJ 0% 0ms 0KB
30 WJ 0% 0ms 0KB

ソースコード

#include <bits/stdc++.h>
using namespace std;
template<typename T> bool chmin(T& a, T b){if(a > b){a = b; return true;} return false;}
template<typename T> bool chmax(T& a, T b){if(a < b){a = b; return true;} return false;}

int main(void) {
    int n;
    cin >> n;

    vector<int> t(n);
    vector<vector<int>> d(n, vector<int>(n));

    for(int i = 0; i < n; i++) cin >> t[i];
    for(int i = 0; i < n; i++) for(int j = 0; j < n; j++) cin >> d[i][j];

    int inf = 1<<30;
    vector<int> dp(1<<n, inf);
    for(int i = 0; i < n; i++) dp[1<<i] = t[i];
    dp[0] = 0;

    for(int bit = 0; bit < (1<<n); bit++) {
        for(int u = 0; u < n; u++) {
            if((bit>>u)&1) continue;

            int sum = 0;
            for(int v = 0; v < n; v++) if((bit>>v)&1) {
                sum += d[v][u];
            }

            int cost = t[u] - sum;
            chmin(dp[bit|(1<<u)], dp[bit]+cost);
        }
    }

    cout << dp[(1<<n)-1] << endl;
}