只对了14 15 16 19 20 21 22不知道哪里错
查看原帖
只对了14 15 16 19 20 21 22不知道哪里错
280250
初羽时涟楼主2024/10/15 17:02
#include<bits/stdc++.h>
using namespace std;
int num[10],n,v[10],c,t,q[10][1000000],ans;
long long minn;
string a;
int found(int n)
{
	int b[10];
	b[1]=n/10000;
	b[2]=(n/1000)%10;
	b[3]=(n/100)%10;
	b[4]=(n/10)%10;
	b[5]=n%10;
	int w=a.size()-1;
	for(int h=5;h>=1;h--)w=q[b[h]][w+1]-2;
	if(w!=0)
	{
		int u=n;
		for(int i=1;i<10;i++)u+=num[i]*v[i];
		for(int h=5;h>=1;h--)u-=v[b[h]];
		return u;
	}
	return -1;
}
int main()
{
	cin>>c>>t;
	for(int i=1;i<=t;i++)
	{
		minn=0;
		cin>>a;
		for(int k=1;k<10;k++)num[k]=0;
		for(int j=0;j<a.size();j++)
			for(int k=1;k<10;k++)q[k][j+1]=0;
		for(int j=1;j<10;j++)cin>>v[j];
		for(int j=0;j<a.size();j++)
		{
			num[a[j]-48]++;
			for(int k=1;k<10;k++)
			{
				if(a[j]==k+48)q[k][j+1]=j+1;
				else q[k][j+1]=q[k][j];
			}
		}
		for(int i=1;i<10;i++)minn+=num[i]*v[i];
		/*
		for(int k=1;k<10;k++)cout<<num[k]<<" ";
		cout<<endl;
		for(int j=0;j<a.size();j++)
		{
			for(int k=1;k<10;k++)cout<<q[k][j+1]<<" ";
			cout<<endl;
		}
		*/
		for(int s=0;s<100000;s++)
		{
			long long g=found(s);
			if(g<=minn&&g!=-1)minn=g,ans=s;
			//cout<<s<<" "<<g<<endl;
		}
		cout<<minn<<endl;
	}
}
2024/10/15 17:02
加载中...