分析:暴搜,复杂度一次最高也才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