HDU 1015 Safecracker (DFS)

来源:互联网 发布:2016淘宝店铺装修教程 编辑:程序博客网 时间:2024/04/28 13:45
//题意自己看,不会度娘
#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>using namespace std;char a[15];char b[15];int n,num,len;int visit[15];bool mmp=false;bool cmp(char a,char b)//char,不是int {return a>b;}//排序 void init()//存数字 {len=strlen(a);//求长度 mmp=false;memset(visit,0,sizeof(visit));sort(a,a+len,cmp);for(int i=0;i<len;++i){a[i]=a[i]-'A'+1;//a[i]存数字 }}void zj()//数字重新变为字母 {for(int i=0;i<5;++i)b[i]=b[i]+'A'-1;}bool yuan(){if(n==b[0]-b[1]*b[1]+b[2]*b[2]*b[2]-b[3]*b[3]*b[3]*b[3]+b[4]*b[4]*b[4]*b[4]*b[4]){mmp=true;return true;}elsereturn false;}void DFS(int sum){if(mmp)return ;//剪枝,如果这五个数字可行 if(sum==5){yuan();//满五个数,检查是否符合题意 return ;}for(int i=0;i<len;++i)//数字循环 {if(!mmp&&!visit[i])//如果没有被使用且 数字没有用过 {b[sum]=a[i];//数次次数赋值 visit[i]=1;//标记DFS(sum+1);visit[i]=0;}}} int main(int argc, char *argv[]){while(scanf("%d %s",&n,a)!=EOF){if(n==0&&!strcmp(a,"END"))break;init();DFS(0);zj();if(mmp)//参数一定要弄对 printf("%s\n",b);else printf("no solution\n");}return 0;}
//Start-ZJ
//2017/9/28/13:50

原创粉丝点击