分析:暴搜,复杂度一次最高也才12^5。
#include<iostream>
#include<cmath>
using namespace std;
#define N 30
char s[15],ts[10],ans[10];
int tar,index[N];
bool vis[N];
void dfs(int d,int n)
{
int i,tmp;
if(d==5)
{
tmp=index[ts[0]-'A']-pow(index[ts[1]-'A'],2)+pow(index[ts[2]-'A'],3)-
pow(index[ts[3]-'A'],4)+pow(index[ts[4]-'A'],5);
if(tmp==tar&&strcmp(ts,ans)>0)
strcpy(ans,ts);
return ;
}
for(i=0;i<n;i++)
if(!vis[s[i]-'A'])
{
ts[d]=s[i];
vis[s[i]-'A']=true;
dfs(d+1,n);
vis[s[i]-'A']=false;
}
}
int main()
{
int i;
for(i=0;i<26;i++) index[i]=i+1;
while(cin>>tar>>s&&(tar||strcmp(s,"END")))
{
memset(vis,false,sizeof(vis));
memset(ans,'\0',sizeof(ans));
memset(ts,'\0',sizeof(ts));
dfs(0,strlen(s));
if(strlen(ans)==0) cout<<"no solution"<<endl;
else
cout<<ans<<endl;
}
return 0;
}
HDU ACM 1015 Safecracker 暴力DFS
原文地址:http://blog.csdn.net/a809146548/article/details/46387769