HDU 1015

给定一个目标值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]='';
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]=='') 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
",ans);
52     }
53 }//    2016-04-22 15:51:41    
我自倾杯,君且随意
原文地址:https://www.cnblogs.com/nicetomeetu/p/5421612.html