#include #include #include using namespace std; int main() { int N; cin >> N; vector X(N); for (int i = 0; i < N; ++i) { for (int j = 0; j < N; ++j) { int p; cin >> p; X[i] |= p << j; } } vector A(N); for (int i = 0; i < N; ++i) { cin >> A[i]; } vector dp(1 << N); for (int i = 0; i < N; ++i) { for (int j = 1 << i; j < 2 << i; ++j) { dp[j] = dp[j - (1 << i)] + A[i]; for (int k = 0; k <= i; ++k) { if (((j >> k) & 1) && (j & X[k]) == X[k]) { dp[j] = min(dp[j], dp[j - (1 << k)]); } } } } cout << dp[(1 << N) - 1] << '\n'; return 0; }