题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1015
题意:题目很长,意思很简单,给定一个数n,再给一串大写字母字符,A=1,B=2,etc,从中找5个数,要求字典序最大,带入题中的式子,使结果等于n。直接深搜得解。
#include <iostream>
#include <algorithm>
using namespace std;
int l,n,a[6];
bool flag,f[27];
char c[27];
void Dfs(int k)
{
int i,v,w,x,y,z;
if (!flag)
{
if (k==6)
{
v=c[a[1]]-'A'+1;
w=c[a[2]]-'A'+1;
x=c[a[3]]-'A'+1;
y=c[a[4]]-'A'+1;
z=c[a[5]]-'A'+1;
if((v-w*w+x*x*x-y*y*y*y+z*z*z*z*z)==n)
{
flag=true;
for (i=1;i<=5;i++)
cout << c[a[i]];
cout << endl;
}
}
else
for (i=0;i<l;i++)
if (f[i])
{
a[k]=i;
f[i]=false;
Dfs(k+1);
f[i]=true;
}
}
}
bool cmp(char p,char q)
{
return p>q;
}
int main()
{
while (cin >> n&&n!=0)
{
memset(f,1,sizeof(f));
flag=false;
cin >> c;
l=strlen(c);
sort(c,c+l,cmp);
Dfs(1);
if (!flag)
cout << "no solution" << endl;
}
return 0;
}