只输出1求助
查看原帖
只输出1求助
169594
Heart_Of_Iron_4楼主2024/12/19 19:47
#include<bits/stdc++.h>
using namespace std;
#define int long long
char ch[114514];
int a[114514],pos[300],c[50][50],n,t1,dp[(1<<20)+114],t2,t3,t4;
set<int> s;
signed main()
{
	ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
	cin>>ch;
	for(int i=0;i<n;++i)s.insert(ch[i]);
	n=s.size();
	t1++;
	for(auto i:s)
	{
		pos[i]=t1;
		t1++;
	}
	for(int i=1;i<=strlen(ch);++i)a[i]=pos[ch[i-1]];
	for(int i=1;i<strlen(ch);++i)c[a[i+1]][a[i]]++;
	memset(dp,0x3f,sizeof(dp));
	dp[0]=1;
	for(int s=1;s<(1<<n);++s)
	{
		for(int i=1;i<=n;++i)
		{
			if((1<<(i-1))&s)
			{
				t2=s-(1<<(i-1));
				t3=dp[t2];
				for(int j=1;i<=n;++i)if((1<<(j-1))&t2)t3+=c[j][i];
				dp[s]=min(dp[s],t3);
			}
		}
	}
	cout<<dp[(1<<n)-1];
	return 0;
}
2024/12/19 19:47
加载中...