题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1015
题意:给定一个数n,再给一串大写字母字符,A=1,B=2,etc,从中找5个数,要求字典序最大
using namespace std;
#include<cstdio>
#include<algorithm>
#include<cstring>
int l,n; //l=strlen(c)
int a[6]; //v,w,x,y,z
bool flag,f[27];
char c[27];
void Dfs(int k)
{
int 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 (int i=1;i<=5;i++)
cout << c[a[i]];
cout << endl;
}
}
else
for (int 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(scanf("%d",&n)&&n)
{
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;
}