#include <algorithm> #include <climits> #include <iostream> #include <vector> using namespace std; int main() { int n; cin >> n; vector<char> balloon(n); for (int i = 0; i < n; ++i) { cin >> balloon[i]; } vector<int> t(n+1); for (int i = 1; i <= n; ++i) { cin >> t[i]; } vector<vector<long long>> pre(n + 1, vector<long long>(3)); for (int i = 1; i <= n; i ++ ) { pre[i][0] = pre[i - 1][0]; pre[i][1] = pre[i - 1][1]; pre[i][2] = pre[i - 1][2]; if (balloon[i - 1] == '0') { pre[i][1] += t[i]; pre[i][2] += t[i]; } else if (balloon[i - 1] == '1') { pre[i][0] += t[i]; pre[i][2] += t[i]; } else { pre[i][0] += t[i]; pre[i][1] += t[i]; } } long long ans = LLONG_MAX; vector<long long> mn(n+1); int a[3] = {0, 1, 2}; do { mn[1] = pre[1][a[0]] - pre[1][a[1]]; for (int i = 2; i <= n; i ++ ) { mn[i] = min(mn[i - 1], pre[i][a[0]] - pre[i][a[1]]); } for (int i = n + 1; i >= 1; i -- ) { ans = min(ans, pre[n][a[2]] - pre[i - 1][a[2]] + pre[i - 1][a[1]] + mn[i - 1]); } } while (next_permutation(a, a + 3)); cout << ans << endl; return 0; } // 64 位输出请用 printf("%lld")