HDU 1015 爆搜 /dfs+回溯

题目描述好长0-0,看的好累。
看完题目,在草稿纸上写了 dfs bfs  爆搜几个字。一想爆搜也就26^5次循环。于是就写了,写完觉得可能数据会有坑过不了,但是没想到31MS过了。

看到有人用dfs写了0MS过了。

http://blog.csdn.net/vsooda/article/details/7996922

另外,这道题目可以学的比较基础的地方就是 字符和整数 之间的转换吧,以及代码书写的优美性。

#include <iostream>
#include <stdio.h>
#include <math.h>
#include <string.h>
#include <algorithm>
using namespace std;
#define ll __int64
int num[30];
int cal(int v,int w,int x,int y,int z)
{
    return v-w*w+x*x*x-y*y*y*y+z*z*z*z*z;
}
bool cmp(int a,int b)
{
    return a>b;
}

void sovle(int len,int t)
{
    for(int i=0;i<len;i++)
        {
            for(int j=0;j<len;j++)
            {
                if(i==j) continue;
                for(int k=0;k<len;k++)
                {
                    if(k==j||k==i) continue;
                    for(int m=0;m<len;m++)
                    {
                        if(m==i||m==j||m==k) continue;
                        for(int n=0;n<len;n++)
                        {
                            if(n==i||n==j||n==k||n==m) continue;
                            if(cal(num[i],num[j],num[k],num[m],num[n])==t)
                            {
                                printf("%c%c%c%c%c\n",num[i]+64,num[j]+64,num[k]+64,num[m]+64,num[n]+64);
                                return ;
                            }
                        }
                    }
                }
            }
        }
        printf("no solution\n");
}
int main()
{
    int t;
    char s[30];
    while(~scanf("%d%s",&t,s))
    {
        if(t==0 && (!strcmp(s,"END")))
            break;
        int len=strlen(s);
        for(int i=0;i<len;i++)
        {
            num[i]=s[i]-64;
        }
        sort(num,num+len,cmp);
        sovle(len,t);
    }
    return 0;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值