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("\n");
                }
                else printf("no solution\n");
      }
      return 0;
}

 

posted @ 2016-01-27 13:26  GeniusYang  阅读(223)  评论(0编辑  收藏  举报