题目大意:输入一段字符串和一个整数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
2462

被折叠的 条评论
为什么被折叠?



