HDU 1015 Safecracker DFS
来源:互联网 发布:重命名文件夹 linux 编辑:程序博客网 时间:2024/04/28 17:05
题目是说给出一个数字,然后再给出一行字母,其中字母按字母表的顺序代表相应的数字(A=1, B=2, ..., Z=26),问如何在这一行字母中筛选出5个字母,使得满足等式v - w^2 + x^3 - y^4 + z^5 = target(target就是你输入的数字),组合按字典序大的在前进行排列。既然是要筛选出合理的情况,那就是要从大到小遍历一遍,直接DFS就能过,也没什么特殊的剪枝,注意下在字母输入完之后进行一下排序,一开始没排序结果出来的和样例不一样= =
然后,放代码吧= =
#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<cmath>using namespace std;char s[105],ans[10];int a[105],res[10];int N,k,t;bool part[105];bool target(int v,int w,int x,int y,int z){ int temp; temp=v-w*w+x*x*x-y*y*y*y+z*z*z*z*z; if(temp==N) return 1; else return 0;}int dfs(int step){ int i,j; if(t==1) return 0; if(step==5) { if(target(res[0],res[1],res[2],res[3],res[4])==1) { t=1; for(i=0;i<5;i++) { ans[i]=res[i]+'A'-1; } return 0; } } else { for(i=k-1;i>=0;i--) { if(!part[i]) { part[i]=1; res[step]=a[i]; dfs(step+1); part[i]=0; } } } return 0;}int main(){ int i; while(scanf("%d",&N)!=EOF) { scanf("%s",s); if(N==0&&strcmp(s,"END")==0) break; t=0; memset(part,0,sizeof(part)); k=strlen(s); for(i=0;i<k;i++) { a[i]=s[i]-'A'+1; } sort(a,a+k); dfs(0); if(t==0) cout<<"no solution"<<endl; else cout<<ans[0]<<ans[1]<<ans[2]<<ans[3]<<ans[4]<<endl; } return 0;}
0 0
- hdu 1015 Safecracker dfs()
- hdu 1015Safecracker(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 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)
- HDOJ(HDU).1015 Safecracker (DFS)
- HDU Safecracker 1015(dfs入门)
- Collision Module
- CentOS7最小化安装 配置NODE.JS环境
- 题学业水平考试卷
- ORA-01747: user.table.column, table.column 或列说明无效
- jquery 代码冲突
- HDU 1015 Safecracker DFS
- BP神经网络数学推导详解
- Java对象的生与死
- POJ - 3368 - Frequent values(RMQ)
- 癸巳第一诗
- codeforces 706D(字典树)
- mac安装Maven
- Toast变形、Toast不居中解决方法
- NSScanner类的基本用法