HDOJ 1015 Safecracker

来源:互联网 发布:php采集源码 编辑:程序博客网 时间:2024/05/20 09:05

       题目不具有单调性,所以求导可以忽略。考虑参数在有限的可选值之中,所以可以选择了深度优先。确定搜索变量为5个参数,然后进行深度优先搜索,并在深度为5时终止搜索,判断状态。

#include <algorithm>#include<cmath>using namespace std;#include<stdio.h>#include <string.h>int target,len;char value[13];bool pruning[13];int result[5];bool flag;inline bool cmp(char a,char b){    return a>b;}inline bool achieveAim(){    return result[0]-pow((double)result[1],2)+pow((double)result[2],3)-pow((double)result[3],4)+pow((double)result[4],5) ==target;}inline void dfs(int deep){    if(deep==5)    {            if(achieveAim())            flag=true;        return;    }    for (int i=0;i<len;i++)    {        if(flag)            return;        if(pruning[i])            continue;        result[deep]=value[i];        pruning[i]=true;        dfs(deep+1);        pruning[i]=false;    }}int main(){    //freopen("Safecracker.txt","r",stdin);    while (true)    {        memset(value,0,sizeof(value));        memset(pruning,0,sizeof(pruning));        flag=false;        scanf("%d",&target);        getchar();        gets(value);        if (target==0&&strcmp(value,"END")==0)            break;        len=strlen(value);        for (int i=0;i<len;i++)            value[i]-=('A'-1);        sort(value,value+len,cmp);        dfs(0);        if(flag)            printf("%c%c%c%c%c\n",result[0]+'A'-1,result[1]+'A'-1,result[2]+'A'-1,result[3]+'A'-1,result[4]+'A'-1);        else            printf("no solution\n");    }    return 0;}


 

原创粉丝点击