为什么这样搜索不对,感觉应该没问题啊
查看原帖
为什么这样搜索不对,感觉应该没问题啊
690243
houluyu楼主2024/10/17 12:18
#include<bits/stdc++.h>
#define int long long
#define ll long long 
using namespace std;

const int N = 1200005;
const ll inf = 100000000000000000ll;
string s;

int T;
int v[15], a[N];
//pii dp[20];//和和积   用了i位最小和 
int nxt[N][10];
ll  sum, ans;
ll r[N];
int n;

void dfss(int p, int pos)
{
	if(p == 8)
	{
		ll t = sum, x = 0;
		for(int i = p - 1; i >= 1; i --)
		{
			if(r[i])x = x * 10 + r[i], t -= v[r[i]];
		}
		t += x;
		ans = min(ans, t);
		return;
	}
	
	r[p] = 0;
	dfss(p + 1, pos);
	r[p] = 0;	
	for(int i = 1; i <= 9; i ++)
	{
		if(nxt[pos][i] > 0)
		{
			r[p] = i;
			dfss(p + 1, nxt[pos][i] + 1);
			r[p] = 0;
		}
	}

} 

signed main()
{
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	string c;
	cin >> c >> T;
	while(T --)
	{
		ans = inf;
		cin >> s;
		n = s.size();
		memset(a, 0, sizeof a);
		for(int i = 0; i < n; i ++)
		{
			a[i + 1] = (int)s[i] - '0';
		} 
		memset(nxt, 0, sizeof nxt);
		for(int i = n; i >= 1; i --)
		{
			nxt[i][a[i]] = i;
			for(int j = 1; j <= 9; j ++)
			{
				if(j == a[i])continue;
				nxt[i][j] = nxt[i + 1][j];
			}
		} 
		sum = 0;
		for(int i = 1; i <= 9; i ++)
		{
			cin >> v[i];
		}	
		for(int i = 1; i <= n; i ++)
		{
			sum = sum + v[a[i]];
		}
		ans = sum;
		dfss(1, 1);
		cout << ans << endl;
//		return 0;

	}
	return 0;
}

2024/10/17 12:18
加载中...