#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]; } int ans = 1 << 30; for (int i = 0; i < 1 << N; ++i) { int bit = i; while (bit != (1 << N) - 1) { int nbit = i; for (int j = 0; j < N; ++j) { if ((bit & X[j]) == X[j]) { nbit |= 1 << j; } } if (nbit == bit) break; bit = nbit; } if (bit == (1 << N) - 1) { int sum = 0; for (int j = 0; j < N; ++j) { if ((i >> j) & 1) sum += A[j]; } ans = min(ans, sum); } } cout << ans << endl; return 0; }