KDOI-10」商店砍价 题解
本题比较水(雾
我们可以发现当
转移方程详见代码部分。
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=1e5+1;
int c,t,v[N],f[N][6];
char s[N];
signed main(){
cin>>c>>t;
while(t--){
cin>>s+1;
int n=strlen(s+1);
for(int i=1;i<=9;++i)
cin>>v[i];
int ans=0,mins=0;
memset(f,0x3f,sizeof f);
for(int i=1;i<=n+1;++i)
f[i][0]=0;
for(int i=n;i>=1;--i){
ans+=v[s[i]-'0'];//处理普通情况
for(int j=1;j<=5;++j)
f[i][j]=min(f[i+1][j],f[i+1][j-1]+(int)pow(10,j-1)*(s[i]-'0')-v[s[i]-'0']);//当前是选择遗传下来还是当开头
}
for(int i=n;i>=1;--i)
for(int j=1;j<=5;++j)
mins=min(mins,f[i][j]);
cout<<ans+mins<<endl;
}
return 0;
}