HDOJ 1015 Safecracker
来源:互联网 发布:ws15知乎 编辑:程序博客网 时间:2024/05/20 07:16
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1015
DFS
确定搜索变量为5个参数,然后进行深度优先搜索,并在深度为5时终止搜索,判断状态。
预排序是为了获得字典序大的组合,判重。
#include <iostream>#include <string>#include <cstdio>#include <cmath>#include <vector>#include <algorithm>#include <sstream>#include <cstdlib>#include <fstream>using namespace std;int t;string s;void dfs(int step);char tmp[5]; //用来存储需要判断的五个变量bool visit[13]; //对每个字符进行状态标记bool cmp(char a,char b){return a>b;}bool ismatch(){int re=tmp[0]-pow((double)tmp[1],2)+pow((double)tmp[2],3)-pow((double)tmp[3],4)+pow((double)tmp[4],5);return re==t;}int flag=0; //最终状态int main(){while(cin>>t>>s){if(t==0&&s=="END")break;memset(tmp,0,sizeof(tmp));memset(visit,0,sizeof(visit));flag=0;int len=s.size();for(int i=0;i!=s.size();i++)s[i]-=('A'-1);sort(s.begin(),s.end(),cmp);dfs(0);if(flag)cout<<char(tmp[0]+'A'-1)<<char(tmp[1]+'A'-1)<<char(tmp[2]+'A'-1)<<char(tmp[3]+'A'-1)<<char(tmp[4]+'A'-1)<<endl;else cout<<"no solution"<<endl; }return 0;}void dfs(int step){if(step==5){if(ismatch())flag=1;return ;}for(int i=0;i!=s.size();i++){if(flag)return ;if(visit[i])continue; //剪枝,去重复字符,搜素时候找寻不一样的5个字符进行判断tmp[step]=s[i];visit[i]=1; dfs(step+1);visit[i]=0; //回溯标记要取消}}
- HDOJ 1015 Safecracker
- HDOJ 1015 Safecracker
- hdu/hdoj 1015 Safecracker
- HDOJ 1015 Safecracker
- HDOJ 1015 Safecracker
- hdoj 1015 Safecracker 【dfs】
- hdoj 1015 Safecracker
- HDOJ 1015 Safecracker-DFS
- hdoj 1015 Safecracker【DFS】
- hdoj 1015 Safecracker 【DFS】
- HDOJ-1015Safecracker(DFS)
- HDOJ HDU 1015 Safecracker
- hdoj 1015 Safecracker
- HDOJ 1015 Safecracker
- HDOJ 1015 Safecracker 简单搜索
- hdoj 1015 Safecracker---盗窃贼
- HDOJ 1015 Safecracker(DFS)
- HDOJ/HDU 1015 Safecracker(深搜)
- Android 开发 官方 论坛
- hdu4450-Draw Something
- 了解typename的双重意义
- C表达式中出现有符号数和无符号数时编译器处理的规则
- 水晶报表版本
- HDOJ 1015 Safecracker
- 一种随机数生成算法
- 第十三周 项目二:定义Teacher(教师)类和Cadre(干部)类,采用多重继承方式,派生出Teacher_Cadre(教师兼干部)类
- django admin中 外键下拉框添加过滤(只需要显示我所要的过滤结果)
- 获取分辨率
- mysql 备份 恢复
- Reduce作业运行时错误:Too many fetch-failures
- 获取jar包同目录的配置文件
- C++中fread函数和fwrite函数的用法