ソースコード
#include <bits/stdc++.h>
typedef long long ll;
using std::cout;
using std::endl;
using std::cin;
int n;
std::vector<int> a;
std::vector<std::vector<int>> li;
int main(){
cin >> n; a.resize(n); li.resize(n, std::vector<int>(n));
for(int i = 0; i < n; i++) cin >> a[i];
for(int i = 0; i < n; i++) for(int j = 0; j < n; j++) cin >> li[i][j];
int dp[(1 << n)] = {};
for(int i = 1; i < (1 << n); i++) dp[i] = 1e9;
for(int i = 0; i < (1 << n); i++) {
for(int j = 0; j < n; j++) {
if((i >> j) & 1) continue;
int tmp = a[j];
for(int k = 0; k < n; k++) {
if((i >> k) & 1) tmp -= li[k][j];
}
dp[i | (1 << j)] = std::min(dp[i | (1 << j)], dp[i] + tmp);
}
}
cout << dp[(1 << n) - 1] << endl;
return 0;
}