#include <algorithm> #include <cstdio> #include <iostream> #include <limits> #include "vector" using namespace std; int main() { int n; std::cin >> n; std::vector<int> c(n); getchar(); for (int i = 0; i < n; ++i) { c[i]=getchar()-'0'; } std::vector<int> t(n); for (int i = 0; i < n; ++i) { std::cin >> t[i]; } std::vector<long long> prev(15, std::numeric_limits<long long>::max()/10); prev[0] = prev[1] = prev[2] = t[0]; prev[c[0]] = 0; std::vector<int> m = {0, 1, 2, 1, 2, 0, 2, 0, 1, 2, 1, 2, 0, 1, 0}; for (int i = 1; i < n; ++i) { std::vector<long long> cur(15, 0); std::vector<int> cost = {t[i], t[i], t[i]}; cost[c[i]] = 0; for (int j = 0; j < 3; ++j) { cur[j] = prev[j] + cost[j]; } for (int j = 3; j < 9; ++j) { cur[j] = std::min(prev[(j - 3) / 2], prev[j]) + cost[m[j]]; } for (int j = 9; j < 15; ++j) { cur[j] = std::min(prev[j], prev[j - 6]) + cost[m[j]]; } prev = cur; } std::cout << *std::min_element(prev.begin(), prev.end()) << std::endl; return 0; }