hdu 1015 Safecracker (dfs)
2016-10-08 18:12
316 查看
题意:输入一个数n,一个字符串,字符串得长度大于等于5小于等于12,且均是大写字母,A 代表 1 B代表 2...
求满足n = A - B ^2 + C^3 - D^4 + E^5 - F^6 ,得5个字母 。
思路:遍历每个字母,用一个数组记录哪些选入字母选入,和选入的次序,因为次序影响结果,由于要找到字典序最大的,先对字符串升序排,然后从字符串最后找,找到的第一个即为答案,用ex变量记录是否存在答案
求满足n = A - B ^2 + C^3 - D^4 + E^5 - F^6 ,得5个字母 。
思路:遍历每个字母,用一个数组记录哪些选入字母选入,和选入的次序,因为次序影响结果,由于要找到字典序最大的,先对字符串升序排,然后从字符串最后找,找到的第一个即为答案,用ex变量记录是否存在答案
#include<iostream> #include<string.h> #include<math.h> #include<algorithm> using namespace std; char f[18]; int vis[12]={0},sum,ans[18]; bool ex=false; int change(char c) { return c-'A'+1; } void dfs(int n,int k) { int len = strlen(f); if(k==6) { sum=pow(ans[1],1)-pow(ans[2],2)+pow(ans[3],3)-pow(ans[4],4)+pow(ans[5],5); if(sum==n) { for(int i=1;i<=5;i++) { cout<<(char)(ans[i]+'A'-1); } cout<<endl; ex=1; } } else { if(ex)return; for(int i=len-1;i>=0;i--) { if(vis[i]==0) { vis[i]=1; ans[k]=change(f[i]); dfs(n,k+1); vis[i]=0; } } } } int main() { int n; while(cin>>n&&cin>>f&&n!=0&&f[0]!='E'&&strlen(f)!=3) { ex=false; sort(f,f+strlen(f)); sum=0; dfs(n,1); if(ex==false) { cout<<"no solution"<<endl; } } }
相关文章推荐
- HDU-1015 Safecracker(DFS+暴力回溯 / 五重循环)
- HDU 1015 Safecracker(DFS)
- HDU 1015 Safecracker (很棒的一道DFS)
- HDU 1015 Safecracker ( DFS )
- HDU 1015 Safecracker(DFS)
- HDU 1015 Safecracker(DFS)
- hdu 1015 Safecracker【dfs 排列组合】
- HDU_1015_Safecracker(dfs)
- hdu 1015Safecracker(dfs)
- HDU 1015--Safecracker【DFS】
- POJ 1248 && HDU 1015 Safecracker(dfs)
- hdu 1015 Safecracker 暴力dfs
- HDU 1015 Safecracker (DFS)
- HDOJ(HDU).1015 Safecracker (DFS)
- HDU 1015 Safecracker(DFS)
- HDU 1015 Safecracker(一道很好的dfs)
- hdu 1015 Safecracker【DFS】
- hdu - 1010 Tempter of the Bone (dfs+奇偶性剪枝) && hdu-1015 Safecracker(简单搜索)
- hdu 1015 Safecracker DFS解法 ,简单明了
- HDU 1015 Safecracker(DFS搜索)