HDU 1015 Safecracker
来源:互联网 发布:上海淘宝公司 编辑:程序博客网 时间:2024/06/10 02:53
终于做对DFS了。这题就是简单的DFS吧,不过对我而言,我是费了不少力气。
#include<cstdio>#include<cstring>#include<algorithm>#include<cmath>#include<vector>using namespace std;char s[15];bool isok,visited[15];int len;void dfs(int target,char *ans,int cnt,int id)//cnt用于存储是第几次,一共5次。{ if(isok) return; if(target==0&&cnt==5) { isok=true; return; } if(cnt>=5) return; int t; for(int i=0;i<len;i++) { if(isok) break; if(i==id&&visited[i]) continue; visited[i]=true;//访问过了 ans[cnt]=s[i]; int a=s[i]-'A'+1; switch(cnt) { case 0:t=a; break; case 1:t=-a*a; break; case 2:t=a*a*a; break; case 3:t=-a*a*a*a; break; case 4:t=a*a*a*a*a; break; } dfs(target-t,ans,cnt+1,i); visited[i]=false;//这里要变为没有访问过,否则搜索会有问题 }}bool cmp(char a,char b){ return a>b;}int main(){ int target; while(scanf("%d%s",&target,s)) { if(target==0&&strcmp(s,"END")==0) break; len=strlen(s); sort(s,s+len,cmp);//排序,因为题目要求是字典序大的答案 char ans[5]; memset(visited,false,sizeof(visited)); isok=false; dfs(target,ans,0,0); if(isok) { for(int i=0;i<5;i++) printf("%c",ans[i]); printf("\n"); } else printf("no solution\n"); } return 0;}
0 0
- HDU - 1015 Safecracker
- HDU 1015 Safecracker
- HDU 1015 Safecracker
- Hdu 1015 Safecracker
- hdu 1015 Safecracker
- hdu 1015 Safecracker(枚举)
- hdu 1015 Safecracker
- hdu 1015 Safecracker
- HDU 1015 Safecracker(深搜)
- hdu 1015 Safecracker
- hdu 1015 Safecracker dfs()
- hdu 1015 Safecracker
- HDU 1015 Safecracker
- hdu(1015)Safecracker
- hdu/hdoj 1015 Safecracker
- hdu 1015 Safecracker
- hdu 1015 Safecracker
- hdu 1015 Safecracker
- Linux 虚拟内存和物理内存
- 实现自己的ls
- 不用”if“,”?:“,”switch“或其他判断语句,求两个数中较大的数或较小的数
- Oracle存储过程详解(引用)+补充
- MySql 主键自动增长
- HDU 1015 Safecracker
- 数据结构课程设计《银行存取款系统》
- JAVA设计模式(十)——享元模式
- Linux学习笔记一:Ubuntu 12.04中文输入法的安装
- 文件的读写和上锁
- ORACLE 11G ADG的STATSPACK性能报表配置方法
- IOS开发中用@interface声明局部变量ivar和用@property声明属性的区别
- codeforces 190D Non-Secret Cypher(two pointers)
- 进度条