#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 = 0; j < 1 << i; ++j) { dp[j + (1 << i)] = dp[j] + A[i]; } } for (int i = 0; i < 1 << N; ++i) { for (int j = 0; j < N; ++j) { if ((i >> j) & 1) { dp[i] = min(dp[i], dp[i - (1 << j)] + ((i & X[j]) == X[j] ? 0 : A[j])); } } } cout << dp[(1 << N) - 1] << '\n'; return 0; }