Untitled
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 1294 Accepted Submission(s): 759
For each testcase, there are two lines:
1. The first line contains two integers n and a (1≤n≤20,1≤a≤106).
2. The second line contains n integers b1,…,bn (∀1≤i≤n,1≤bi≤106).
-1
solution:
我們知道一個大數模小數大數會變小,而小數模大數不變,因此我們把b[i]從大到小排序,然後dfs即可
#include<cstdio>
#include<algorithm>
using namespace std;
int b[30],n;
bool cmp(int a, int b)
{
return a > b;
}
int dfs(int cnt, int pos, int remain)
{
if (remain == 0)return cnt;
if (pos >= n)return n + 1;
int x = dfs(cnt, pos + 1, remain);
int y = dfs(cnt + 1, pos + 1, remain%b[pos]);
return min(x, y);
}
int main()
{
int t,a;
scanf("%d", &t);
while (t--)
{
scanf("%d%d", &n, &a);
for (int i = 0; i < n; i++)
scanf("%d", &b[i]);
sort(b, b + n,cmp);
int x = dfs(0, 0, a);
if (x == n + 1)printf("-1\n");
else printf("%d\n", x);
}
return 0;
}