码迷,mamicode.com
首页 > 其他好文 > 详细

HDOJ 5339 Untitled 水

时间:2015-08-02 11:53:02      阅读:111      评论:0      收藏:0      [点我收藏+]

标签:


Untitled

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)
Total Submission(s): 481    Accepted Submission(s): 245


Problem Description
There is an integer a and n integers b1,,bn. After selecting some numbers from b1,,bn in any order, say c1,,cr, we want to make sure that a mod c1 mod c2 mod mod cr=0 (i.e., a will become the remainder divided by ci each time, and at the end, we want a to become 0). Please determine the minimum value of r. If the goal cannot be achieved, print ?1 instead.
 

Input
The first line contains one integer T5, which represents the number of testcases. 

For each testcase, there are two lines:

1. The first line contains two integers n and a (1n20,1a106).

2. The second line contains n integers b1,,bn (?1in,1bi106).
 

Output
Print T answers in T lines.
 

Sample Input
2 2 9 2 7 2 9 6 7
 

Sample Output
2 -1
 

Source
 


#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>

using namespace std;

const int INF=0x3f3f3f3f;

int n,a;
int b[30];

int main()
{
  int T_T;
  scanf("%d",&T_T);
  while(T_T--)
    {
      scanf("%d%d",&n,&a);
      for(int i=0;i<n;i++)
        {
          scanf("%d",b+i);
        }
      sort(b,b+n,greater<int>());

      int ans=INF;
      for(int i=0;i<(1<<n);i++)
        {
          int ta=a;
          int cnt=0;
          for(int j=0;j<n;j++)
            {
              if((i>>j)&1)
                {
                  cnt++;
                  ta%=b[j];
                }
            }
          if(ta==0)
            {
              ans=min(ans,cnt);
            }
        }
      if(ans==INF) ans=-1;
      printf("%d\n",ans);
    }
  return 0;
}



版权声明:本文为博主原创文章,未经博主允许不得转载。

HDOJ 5339 Untitled 水

标签:

原文地址:http://blog.csdn.net/ck_boss/article/details/47205037

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!