• Hdu1015&&寒假作业第二组I题


    题意是A-Z对应1-26,然后给个目标数字和字符串,看看字符串里的某5个字符的组合能不能使v - w^2 + x^3 - y^4 + z^5 = target等式成立,其实多写几个循环也可以达到目的,不过应该会超时,所以还是dfs。

    result数组保存最后5个数字,注意要用sort先降序排序,sort默认升序,得加个compare函数,因为本题可能有多解,人家要字典序最大的。num1数组是用来标记该数字被用过没有,注意要memset一下(忘了memset于是每次只能对一组数据也是醉了)。

    #include <iostream>
    #include <algorithm>
    #include <cstdio>
    #include <map>
    #include <string>
    #include <string.h>
    #include <queue>
    #include <vector>
    using namespace std;
    int pow(int x,int y)
    {
        int z=1;
        for(;y>0;y--)
            z*=x;
        return z;
    }
    bool compare(int a,int b)
    {
          return a>b;
    
    }
    int num[1000]={0};
    int num1[1000]={0};
    int result[1000]={0};
    char word[10000];
    int tar;
    int len;
    int dfs(int m,int sum)
    {
            if(sum==tar&&m==6)
            return 1;
            else if(sum!=tar&&m==6)
              return 0;
            else if(m<=5)
            {
                   for(int i=0;i<len;i++)
                   {
                           if(!num1[i])
                           {
                              num1[i]=1;
                              result[m]=num[i];
                              if(m%2==0)
                               {
                                    if(dfs(m+1,sum-pow(num[i],m)))
                                    return 1;}
                              else {
                                    if(dfs(m+1,sum+pow(num[i],m)))
                                    return 1;}
    
                               num1[i]=0;
                           }
                   }
            }
            return 0;
    }
    int main()
    {
          while(scanf("%d%s",&tar,word)!=EOF)
          {
            memset(num1,0,sizeof(num1));
            if(!strcmp(word,"END"))
                    break;
            len=strlen(word);
            for(int i=0;i<len;i++)
            {
                  num[i]=word[i]-'A'+1;
            }
            sort(num,num+len,compare);
                    if(dfs(1,0))
                    {
                            for(int i=1;i<6;i++)
                              printf("%c",result[i]+'A'-1);
                              printf("
    ");
                    }
                    else printf("no solution
    ");
          }
          return 0;
    }
  • 相关阅读:
    [补]2019HDU杭电多校第一场A
    [补]2019nowcoder牛客第三场F(暂且)
    [补]2019nowcoder牛客第一场E、I
    [学]从零(多项式基础与FFT)开始BM学习笔记
    [补]2019nowcoder牛客第二场E、H(upd0730)
    从一个简单的例子对win 服务程序进行讲解
    HTTP协议学习记录及总结
    Windows身份验证与forms身份验证的结合
    关于Sql server 的 几道面试题
    PlaceHolder控件的使用
  • 原文地址:https://www.cnblogs.com/GeniusYang/p/5162942.html
Copyright © 2020-2023  润新知