普通dp,f[i]表示删掉了i个数
#include<bits/stdc++.h>
#define int long long
#define endl '\n'
using namespace std;
const int N = 1e5 + 10;
const int M = 501;
int n, v[10], a[N], f[N], r[11], ans[11];
char s[N];
inline void read() {
cin >> s;
//scanf("%s", &);
int x = 0;
n = strlen(s);
for(int i = 1; i <= n; i++) {
a[i] = s[i - 1] - '0';
if(i <= 10){
ans[i] = ans[i - 1] * 10 + a[i];
}
}
}
signed main() {
// if(system("fc bargain.out bargain1.ans")){
//
// }
// freopen("bargain2.in", "r", stdin);
// freopen("bargain.out", "w", stdout);
ios::sync_with_stdio(false);
cin.tie(0);cout.tie(0);
int x = 1;
for(int i = 1; i <= 10; i++){
r[i] = x;
x *= 10;
}
int c, t;
cin >> c >> t;
while(t--){
read();
int k = 0;
for(int i = 1; i <= 9; i++){
cin >> v[i];
}
for(int i = 1; i <= n; i++){
k += v[a[i]];
f[i] = 0x7ffffffffffff;
}
// cout << ans[16] << "s";
int minn = k;
f[0] = 0;
// int ans = 0;
for(int i = 1; i <= n; i++){
f[i] = f[i - 1] + v[a[i]];
if(i == n){
minn = min(minn, f[i]);
}
for(int j = i - 1; j >= 1; j--){
if(i - j > 6){
f[j] = f[j - 1] + v[a[i]];//单独删
f[j - 1] = 0x7ffffffffffff;
if(i == n){
minn = min(minn, f[j]);
}
break;
}else{
f[j] = f[j] + r[i - j] * a[i];
f[j] = min(f[j], f[j - 1] + v[a[i]]);
}
if(i == n){
minn = min(minn, f[j]);
}
// cout << i << " " << j << " " << f[j] << endl;
}
if(i <= 6){
// ans = ans * 10 + r[i] * a[i];
f[0] = ans[i];
}else{
f[0] = 0x7ffffffffffff;
}
if(i == n){
minn = min(minn, f[0]);
}
}
// for(int j = 0; j <= n; j++){
// cout << n << " " << j << " " << f[j] << endl;
// }
cout << minn << endl;
}
}