hdoj 1015 Safecracker(竊賊) Dfs

題目真是囉嗦=-=

(A=1, B=2, ..., Z=26)

v - w^2 + x^3 - y^4 + z^5 = target 

輸入:tarrget+一段字符串
輸出:滿足條件的字符串(多個按字典序)

#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#define res(v,w,x,y,z) v-w*w+x*x*x-y*y*y*y+z*z*z*z*z
using namespace std;
int num[5][30],s[30];
long long n;
char a[50];
bool vis[30];
bool cmp(char a,char b)
{
    return !(a<b);
}
bool dfs( int k)
{
    if(k==5)
    {
        long long temp=res(s[0],s[1],s[2],s[3],s[4]);
            if(temp==n)
                return true;
        return false;
    }
    else
    {
        for(int i=0;i<strlen(a);i++)
        {
            if(vis[i]==false)		//標記
            {
                vis[i]=true;
                s[k]=a[i];
                if(dfs(k+1))
                    return true;
                vis[i]=false;
            }
        }
    }
    return false;
}
int main()
{
    while(scanf("%lld %s",&n,a))
    {
        if(n==0&&strcmp(a,"END")==0)
            break;
        for(int i=0;i<strlen(a);i++)
            a[i]=a[i]-'A'+1;		//轉換成整數類型
        sort(a,a+strlen(a),cmp);	//排序
        memset(s,0,sizeof(s));
        memset(vis,false,sizeof(vis));
        if(dfs(0))
            for(int i=0;i<5;i++)
                printf("%c",s[i]+'A'-1);
        else
            printf("no solution");
        printf("\n");
    }
}


發佈了50 篇原創文章 · 獲贊 3 · 訪問量 8750
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章