using namespace std;
int main(){
    int n;
    cin>>n;
    vector<int> v(26);
    for(int i=0;i<26;++i)cin>>v[i];
    string s;
    cin>>s;
    vector<vector<int>> m(26, vector<int>(26));
    for (int x=0;x<26;++x)
        for (int y=0;y<26;++y) {
            int k=INT_MAX;
            for(int c=0;c<26;++c){
                int t=0;
                if(x!=c)t+=v[c];
                if(y!=c)t+=v[c];
                k=min(k, t);
            }
            m[x][y]=k;
        }
    int h=n/2;
    vector<pair<int,int>> p;
    vector<int>o;
    int b=0;
    for(int i=0;i<h;++i){
        int j=n-1-i;
        int a=s[i]-'a';
        int d=s[j]-'a';
        p.push_back(make_pair(a, d));
        int c=m[a][d];
        o.push_back(c);
        b+=c;
    }
    int g=0;
    for(int i=0;i<h;++i){
        int a=p[i].first;
        int d=p[i].second;
        int o_i=o[i];
        int n_c=m[d][a];
        g=max(g, o_i - n_c);
    }
    for(int i=0;i<h;++i)
        for (int j=i+1;j<h;++j) {
            int a=p[i].first;
            int d=p[i].second;
            int b_p=p[j].first;
            int c_p=p[j].second;
            int o_i=o[i], o_j=o[j];
            int o_t=o_i+o_j;
            int c1=m[b_p][d]+m[a][c_p];
            int g1=o_t-c1;
            int c2=m[c_p][d]+m[a][b_p];
            int g2=o_t-c2;
            int c3=m[b_p][a]+m[d][c_p];
            int g3=o_t-c3;
            int c4=m[c_p][a]+m[d][b_p];
            int g4=o_t-c4;
            g=max(g,max(max(g1,g2),max(g3,g4)));
        }
    cout<<max(0,b-g)<<endl;
    return 0;
}

0 comments

No comments so far...

Information

ID
1611
Time
1000ms
Memory
256MiB
Difficulty
9
Tags
(None)
# Submissions
176
Accepted
12
Uploaded By