[luogu] P1246 编码 dfs打表

前言

d f s dfs dfs是真的好难
传送门 :

思路

因为数据长度只有 6 6 6 ,所以我们可以直接打表出来时间复杂度 O ( 2 26 ∗ 6 ) O(2^{26} *6) O(226∗6)

显然是可行的

所以我们可以对于每一个长度,我们都 d f s dfs dfs一遍,然后用 m a p < S t r i n g , i n t > map<String,int> map<String,int> 来

记录位置

CODE

void dfs( int l,int x,string temp)
{
	if(x > l )
	{
		mp[temp] = ++cnt;
		return;
	}

	char i ;
	if(x == 1)
	i = 'a';
	else
	i = temp[x-2]+1;

	for(;i<='z';i++)
	{
		temp[x-1]=i;
		dfs(l,x+1,temp);
	}
}

void solve()
{

	for(int i = 1;i<=6;i++)
	{
		string temp;
		temp.resize(i);

		dfs(i,1,temp);
	}
	string s;cin>>s;
	cout<<mp[s]<<endl;


}
上一篇:JAVA第二十一章(小结)


下一篇:如何检查FileLock而不截断文件?