大概是预处理and暴搜 只有样例一是对的
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+200;
long long summ;
int a[100000],num[10][10],val[10];
int m,n;
bool tempf[10]={1,1,1,1,1,1,1,1,1,1};
int wi=1;
string sn;
int oper(int x,int sum,int sumval,int dep,bool *f){
sum=sum*10+x;
sumval+=val[x];
for(int i=1;i<=9;i++){
for(int j=1;j<=9;j++){
num[i][j]=0;
}
}
if(sumval>sum) {
return sum-sumval;
}
if(dep>=wi){
return 0;
}
bool tf[10];
for(int i=1;i<=9;i++){
tf[i]=f[i];
}
for(int i=1;i<=9;i++){
num[0][i]=1;
}
for(int i=1;i<=9;i++){
if(tf[i]&&num[x][i]) continue;
tf[i]=0;
}
int ans=N;
for(int i=1;i<=9;i++){
if(tf[i]){
ans=min(ans,oper(i,sum,sumval,dep+1,tf));
}
}
ans=min(ans,0);
return ans;
}
int main(){
cin>>m>>n;
for(int nn=1;nn<=n;nn++){
wi=0;
summ=0;
cin>>sn;
while(sn[wi]>'0'&&sn[wi]<='9'){
wi++;
a[wi]=sn[wi-1]-'0';
}
for(int i=1;i<=9;i++){
cin>>val[i];
}
for(int i=1;i<=wi;i++){
summ+=val[a[i]];
for(int j=1;j<=9;j++){
if(num[j][j]==1){
num[a[i]][j]=1;
}
}
}
cout<<summ+oper(0,0,0,0,tempf)<<endl;
}
return 0;
}