HDU 1015 - Safecracker
给定一个目标值target,再给你一个备选字符串(5~12个字符),
要你在这个字符串里选5个出来,满足题中给定的等式,并且你选择的这5个字符组成的字符串必须是所有可能情况中按字典序最大的情况
简单 DFS
1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 using namespace std; 5 int vis[105]; 6 char s[105],ans[10],tmp[10]; 7 int s1[105]; 8 int a[10],len,m; 9 bool flag; 10 int cal() 11 { 12 return a[0]-a[1]*a[1]+a[2]*a[2]*a[2]-a[3]*a[3]*a[3]*a[3]+a[4]*a[4]*a[4]*a[4]*a[4]; 13 } 14 void dfs(int x) 15 { 16 if(x>4) 17 { 18 if(cal()==m) 19 { 20 for(int i=0;i<5;i++) tmp[i]='A'-1+a[i]; 21 tmp[5]='\0'; 22 if(!flag) strcpy(ans,tmp),flag=1; 23 else if(strcmp(ans,tmp)<0){ 24 strcpy(ans,tmp); 25 } 26 } 27 return ; 28 } 29 for(int i=0;i<len;i++) 30 { 31 if(!vis[i]) 32 { 33 vis[i]=1; 34 a[x]=s1[i]; 35 dfs(x+1); 36 vis[i]=0; 37 } 38 } 39 } 40 int main() 41 { 42 while(~scanf("%d%s",&m,s)) 43 { 44 if(m==0&&s[0]=='E'&&s[1]=='N'&&s[2]=='D'&&s[3]=='\0') break; 45 memset(vis,0,sizeof(vis)); 46 len=strlen(s); 47 for(int i=0;i<len;i++) s1[i]=s[i]-'A'+1; 48 flag=0; 49 dfs(0); 50 if(!flag) puts("no solution"); 51 else printf("%s\n",ans); 52 } 53 }// 2016-04-22 15:51:41
我自倾杯,君且随意