#include<iostream>
#include<algorithm>
#include<cstring>
#include<cstdio>
using namespace std;
char str[25];
int flag[25];
int s[25];
int f[25];
bool cmp(char a,char b){
return a>b;
}
int res(int v,int w,int x,int y,int z){
return (v-w*w+x*x*x-y*y*y*y+z*z*z*z*z);
}
int dfs(int step,int len,int n){
if(step==5)
{if(res(f[0],f[1],f[2],f[3],f[4])==n)
return 1;
return 0;
}
for(int i=0;i<len;i++){
if(flag[i])
continue;
flag[i]=1;
f[step]=s[i];
if(dfs(step+1,len,n))
return 1;
flag[i]=0;
}
return 0;
}
int main(){
int i;
int n;
memset(str,'A',20);
while(cin>>n>>str){
if(n==0&&str[0]=='E'&&str[1]=='N'&&str[2]=='D')
break;
int len=strlen(str);
sort(str,str+len,cmp);
for( i=0;i<len;i++){
s[i]=str[i]-'A'+1;
flag[i]=0;
}
if(dfs(0,len,n))
{
for(i=0;i<5;i++)
printf("%c",f[i]+'A'-1);
cout<<endl;
}
else
puts("no solution");
}
return 0;
}
一开始DFS少了个return 0导致结果错误
HDU1015
最新推荐文章于 2020-06-03 18:42:25 发布