题意:给定n,给定5~12个字母,vwxyz为这些字母中的一个,求使得v−w2+x3−y4+z5=n的最大字典序的vwxyz。
将所有出现的字母打上标记,然后从最大的字母代表的数字开始dfs
#include <iostream>
#include <cstdio>
#include <cmath>
#include <cstring>
using namespace std;
int n;
char s[27];
int vis[28];
int ans[6];
int sum=0,flag=0;
using namespace std;
void dfs(int x,int d,int sum){
if(flag) return;
ans[d]=x;
if(d==3&&sum>=n){
return;
}
if(d==4){
if(sum==n){
flag=1;
return;
}
else return;
}
for(int i=27;i>=1;i--){
if(vis[i]&&i!=x){
dfs(i,d+1,sum+pow((-1),d+1)*pow(i,d+2));
}
}
return;
}
int main(){
while(~scanf("%d %s",&n,s)&&n&&strcmp(s,"END")){
flag=0;
memset(vis,0,sizeof(vis));
for(int i=0;s[i];i++){
vis[s[i]-'A'+1]=1;
}
for(int i=27;i>=1;i--){
if(vis[i]){
dfs(i,0,i);
}
}
if(flag){
for(int i=0;i<5;i++){
printf("%c",ans[i]+'A'-1);
}
puts("");
}
else{
puts("no solution");
}
}
}
/*
1 ABCDE
*/
感觉水水的……题解也不知道说啥