HDOJ 1015 Safecracker

来源:互联网 发布:网络课程建设方案 编辑:程序博客网 时间:2024/05/20 07:53

题目大意:输入一段字符串和一个整数target,从中要求找出最大的字符串组VWXYZ,使得v-w^2+x^3-y^4+z^5=target(其中v,w,z,y,z的值为V,W,X,Y,Z在字母表中的位序。


解题思路:经典的DFS,题目要求找出最大的,要先对字符串字符进行从大到小排序。


源代码:

#include<iostream>#include<string>#include<string.h>using namespace std;string s;char jieguo[6];int sum,visit[12],flag,size;char zhongjian;int suanshu(int n,int shu){    int sum;    sum=1;    for(int i=0;i<n;i++)        sum*=shu;    if(n%2==1)        return sum;    else        return -sum;}void dfs(int cut,int n);int main(){    while(cin>>sum)    {        cin>>s;        if(sum==0&&s=="END")            break;        memset(visit,0,sizeof(visit));        size=s.size();        for(int i=0;i<size;i++)            for(int j=i+1;j<size;j++)                if(s[j]>s[i])                {                    zhongjian=s[j];                    s[j]=s[i];                    s[i]=zhongjian;                }        flag=0;        dfs(0,0);        if(flag==0)            cout<<"no solution"<<endl;    }    return 0;}void dfs(int cut,int n){    if(flag==1) return;    if(cut==5&&n==sum)    {        for(int i=0;i<5;i++)            cout<<jieguo[i];        cout<<endl;        flag=1;        return;    }    if(cut>=5) return;    for(int i=0;i<size;i++)    {        if(visit[i]==0)        {            visit[i]=1;            jieguo[cut]=s[i];            dfs(cut+1,n+suanshu(cut+1,s[i]-'A'+1));            visit[i]=0;        }    }    return;}
当前水平评级:4

0 0
原创粉丝点击