题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1015

代码1:

#include<stdio.h>//hdu1015
#include<string.h>
#include<math.h>
#include<stdlib.h> double tg;
int len;
char a[20],b[20];//a存输入的字母,从0开始存。 b存目标字母,从1开始。 int cmp(const void*a, const void*b)
{
return *(char*)b-*(char*)a;
} int solve(double sum,int n)//为什么int sum就不行呢?
{
if(n==6)
{
if(sum==tg)
return 1;
else
return 0;
} for(int i = 0;i<len; i++)
{
int j;
for(j = 1;j<n;j++)//寻找是否与已存的字母重复
if(a[i]==b[j]) break; if(j==n)//若不重复,则存入现在的b[n]中
{
double sum1 = sum;//记录原先的sum值,若不符合条件,则将其值还原
b[n] = a[i];
if(n%2)
sum += pow(b[n]-64,n);
else
sum -= pow(b[n]-64,n);
if(solve(sum,n+1))
return 1;
sum = sum1;//在递归的出口将sum还原为之前的值,这样才不会妨碍下一个字母的操作
}
}
return 0;
} int main()
{
while(scanf("%lf %s",&tg,a)==2 && (tg || strcmp(a,"END")))
{
len = strlen(a);
qsort(a,len,sizeof(a[0]),cmp);//将输入的字母排序,以便最大字典序输出
if(solve(0,1))
puts(b+1);//由于b从1开始存,所以输入的地址要加一个单位
else
puts("no solution");
}
return 0;
}

代码2:

#include<cstdio>//hdu1015 方法2
#include<cstring>
#include<cmath>
#include<cstdlib>
int tg;
int len;
char a[20],b[20]; int cmp(const void*a, const void*b)
{
return *(char*)b-*(char*)a;
} int solve(int n)
{
if(n==6)
{
double sum = pow(b[1]-64,1)-pow(b[2]-64,2) + pow(b[3]-64,3)- pow(b[4]-64,4)+ pow(b[5]-64,5);
if( sum == tg)
return 1;
else
return 0;
} for(int i = 0;i<len; i++)
{
int j;
for(j = 1;j<n;j++)
if(a[i]==b[j])
break; if(j==n)
{
b[n] = a[i];
if(solve(n+1))
return 1;
}
}
return 0;
} int main()
{
while(scanf("%d %s",&tg,a)==2 && (tg || strcmp(a,"END")))
{
len = strlen(a);
qsort(a,len,sizeof(a[0]),cmp);
if(solve(1))
puts(b+1);
else
puts("no solution");
}
return 0;
}

hdu1015 Safecracker —— 回溯的更多相关文章

  1. hdu1015 Safecracker (暴力枚举)

    http://acm.hdu.edu.cn/showproblem.php?pid=1015 Safecracker Time Limit: 2000/1000 MS (Java/Others)    ...

  2. hdu - 1010 Tempter of the Bone (dfs+奇偶性剪枝) && hdu-1015 Safecracker(简单搜索)

    http://acm.hdu.edu.cn/showproblem.php?pid=1010 这题就是问能不能在t时刻走到门口,不能用bfs的原因大概是可能不一定是最短路路径吧. 但是这题要过除了细心 ...

  3. hdu1015(Safecracker )

    Problem Description === Op tech briefing, 2002/11/02 06:42 CST === "The item is locked in a Kle ...

  4. hdu1015 —— 回溯

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1015 因为之前看了下刘汝佳的<算法入门经典>,就用类似打印全排列,八皇后的方法做.本以为不 ...

  5. HDU 1015 Safecracker(第一次用了搜索去遍历超时,第二次用for循环能够了,思路一样的)

    Safecracker Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 65536/32768K (Java/Other) Total S ...

  6. N皇后问题—初级回溯

    N皇后问题,最基础的回溯问题之一,题意简单N*N的正方形格子上放置N个皇后,任意两个皇后不能出现在同一条直线或者斜线上,求不同N对应的解. 提要:N>13时,数量庞大,初级回溯只能保证在N< ...

  7. jQuery 2.0.3 源码分析 回溯魔法 end()和pushStack()

    了解了jQuery对DOM进行遍历背后的工作机制,可以在编写代码时有意识地避免一些不必要的重复操作,从而提升代码的性能 从这章开始慢慢插入jQuery内部一系列工具方法的实现 关于jQuery对象的包 ...

  8. linux中oops信息的调试及栈回溯【转】

    本文转载自:http://blog.csdn.net/kangear/article/details/8217329 ========================================= ...

  9. Java数据结构之回溯算法的递归应用迷宫的路径问题

    一.简介 回溯法的基本思想是:对一个包括有很多结点,每个结点有若干个搜索分支的问题,把原问题分解为对若干个子问题求解的算法.当搜索到某个结点.发现无法再继续搜索下去时,就让搜索过程回溯(即退回)到该结 ...

随机推荐

  1. 把Execl表格中的数据获取出来保存到数据库中

    比如我们遇到一些需要把execl表格中的数据保存到数据库中,一条一条保存效率底下而且容易出错,数据量少还好,一旦遇到数据量大的时候就会累死个人啊,下面我们就来把execl表格中数据保存到对应的数据库中 ...

  2. (入门SpringBoot)SpringBoot配置全局异常(五)

    Spring的全局异常,用于捕获程序员没有捕获的异常.具体请看下面代码: 1.ControllerAdvice拦截异常,统一处理.通过Spring的AOP来管理. @ControllerAdvicep ...

  3. CODECHEF Oct. Challenge 2014 Children Trips

    @(XSY)[分塊, 倍增] Description There's a new trend among Bytelandian schools. The "Byteland Tourist ...

  4. 如何设置tomcat服务器编码为utf-8编码

    原文:http://blog.csdn.net/u014079773/article/details/52637057 在实际开发中我们经常遇到request请求的中文乱码,那么如何解决中文乱码问题? ...

  5. Engine中如何实现鼠标滚轮缩放反置?

    来自:http://zhihu.esrichina.com.cn/?/question/6666 [解决办法]:1,禁用IMapControl的默认鼠标滚轮事件.即设置IMapControl4.Aut ...

  6. jquery的ajax用法

    api参见:http://api.jquery.com/jquery.ajax/

  7. Windows系统文件详解【大全】

    这是网络上转载的一篇文章,找不到原创的出处了--详细的介绍了WINDOWS系统文件的用途,我想各位保存一份以后说不定会有用吧,呵呵..这里按A到Z为大家分好类了,查询的话可以按键盘的Ctrl+F进行搜 ...

  8. HRBUST2030(dfs)

    成语接龙 Time Limit: 1000 MS Memory Limit: 32768 KB 64-bit integer IO format: %lld , %llu Java class nam ...

  9. js eval 解析字符串

    //带变量的字符串var str = 'var a=1; var b=2;'; eval(str); alert(a+b);//结果 3: //数组字符串var arrStr = "[1,2 ...

  10. UVA1422-Processor(二分法+优先队列)

    option=com_onlinejudge&Itemid=8&category=512&page=show_problem&problem=4168"> ...