#include<stdio.h>
#define DEBUG_IO (0)
const int MAX = 85;
const int INF = 65535;
bool isOver = false;
int N, M;
int answer;
int n[MAX];
int vis[MAX];
void dfs(int m, int step)
{
if(m < 0 || (m > 0 && isOver == true && answer <= step))
{
return;
}
if(m == 0)
{
isOver = true;
if(answer > step)
{
answer = step;
}
}
if(vis[m] && vis[m] <= step)
return;
vis[m] = step;
for(int i = 0; i < N; i++)
{
dfs(m - n[i], step + 1);
}
}
int main()
{
#if DEBUG_IO
freopen("input.txt", "r", stdin);
setbuf(stdout, NULL);
#endif
int test_case = 0;
scanf("%d", &test_case);
while(test_case)
{
test_case--;
int i;
scanf("%d %d", &N, &M);
for(i = 0; i < N; i++)
{
scanf("%d", &n[i]);
}
for(i = 0; i < MAX; i++)
{
vis[i] = 0;
}
answer = INF;
isOver = false;
for(i = 0; i < N; i++)
{
dfs(M - n[i], 1);
}
if(isOver)
{
printf("%d\n", answer);
}
else
{
printf("0\n");
}
}
return 0;
}
1027
最新推荐文章于 2024-06-05 20:45:16 发布