http://acm.hdu.edu.cn/showproblem.php?pid=1015
#include<iostream>
#include<stdio.h>
#include<string.h>
#include<math.h>
#include<algorithm>
using namespace std;
int v[28];
char a[28],c[6],ans[6];
int flag,n,len;
bool cmp(char a,char b)
{
return a>b;
}
int judge(int v,int w,int x,int y,int z)
{
if(v-w*w+x*x*x-y*y*y*y+z*z*z*z*z==n)
//printf("n=%d\n",v-w*w+x*x*x-y*y*y*y+z*z*z*z*z);
return 1;
return 0;
}
void dfs(int step)
{
int i;
if(flag)
return;
if(step==5)
{
if(judge(c[0]-64,c[1]-64,c[2]-64,c[3]-64,c[4]-64)==1)
{
flag=1;
strcpy(ans,c);
}
return;
}
else
{
for(i=0;i<len;i++)
{
if(!v[i])
{
v[i]=1;
c[step]=a[i];
dfs(step+1);
v[i]=0;
}
}
}
}
int main()
{
int i,j;
while(scanf("%d %s",&n,a)!=EOF)
{
if(n==0&&strcmp(a,"END")==0)
break;
len=strlen(a);
memset(ans,'%',sizeof(ans));
memset(v,0,sizeof(v));
sort(a,a+len,cmp);
flag=0;
dfs(0);
// printf("s=%d\n",flag);
if(flag)
printf("%s\n",ans);
else
printf("no solution\n");
}
}
第一次做这样搜索题目,其实原意就是迭代,好像也可以暴力枚举,