#include using namespace std; const int INF = 10000000; int main(){ int N; cin >> N; vector> X(N, vector(N)); for (int i = 0; i < N; i++){ for (int j = 0; j < N; j++){ cin >> X[i][j]; } } vector A(N); for (int i = 0; i < N; i++){ cin >> A[i]; } vector B(N, 0); for (int i = 0; i < N; i++){ for (int j = 0; j < N; j++){ B[i] += X[i][j] << j; } } int ans = INF; for (int i = 0; i < (1 << N); i++){ int S = i; for (int j = 0; j < N; j++){ for (int k = 0; k < N; k++){ if ((S & B[k]) == B[k]){ S |= 1 << k; } } } if (S == (1 << N) - 1){ int sum = 0; for (int j = 0; j < N; j++){ if ((i >> j & 1) == 1){ sum += A[j]; } } ans = min(ans, sum); } } cout << ans << endl; }