原以为会被时间hack,结果代码跑完测试数据0ms最多的一个也是200ms
无脑暴力就可以了,暴力的人生不需要解释
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
int a,n;bool flag;
int num[211];
int used[211];
bool cmp(int a,int b)
{
return a>b;
}
int minn=1111;
void dfs(int cnt,int rest)
{ //printf("%d %d\n",rest,cnt);
if(rest==0)
{
flag=true;
minn=min(minn,cnt);
//printf("minn=%d\n",minn);
return ;
}
if(cnt>minn)
return ;
int i;
for(i=0;i<n;i++)
{
if(rest<num[i])
continue;
else if(used[i]==1)
continue;
used[i]=1;
int temp=rest;
//if(num[i]==2)
//printf("asd %d %d\n",rest,cnt);
rest=rest%num[i];
//printf("%d %d %d\n",rest,num[i],cnt);
dfs(cnt+1,rest);
used[i]=0;
rest=temp;
}
}
int main()
{
int t;
int i;
//printf("%d\n",1%7);
scanf("%d",&t);
while(t--)
{
minn=1111;flag=false;
scanf("%d%d",&n,&a);
for(i=0;i<n;i++)
scanf("%d",&num[i]);
sort(num,num+n,cmp);
dfs(0,a);
if(flag)
{
printf("%d\n",minn);
}
else
printf("-1\n");
}return 0;
}