HDU 5339 Untitled
题意:有一个整数a和n个整数b1,…,bn。在这些数中选出若干个数并重新排列,得到1,…,cr。我们想保证a mod c1 mod c2 mod… mod cr=0。请你得出最小的r,也就是最少要选择多少个数字。如果无解,请输出-1−1.
解法:dfs。水题,随便搜一下就好了。
代码:
#include<stdio.h>
#include<iostream>
#include<algorithm>
#include<string>
#include<string.h>
#include<math.h>
#include<limits.h>
#include<time.h>
#include<stdlib.h>
#include<map>
#include<queue>
#include<set>
#include<stack>
#include<vector>
#define LL long long
using namespace std;
bool cmp(int a, int b)
{
return a > b;
}
int b[25];
int n;
int ans;
void dfs(int i, int mod, int step)
{
if(mod == 0)
ans = min(ans, step);
for(i = i + 1; i < n; i++)
{
if(b[i] > mod) continue;
dfs(i, mod % b[i], step + 1);
}
}
int main()
{
int T;
while(~scanf("%d", &T))
{
while(T--)
{
int a;
scanf("%d%d", &n, &a);
for(int i = 0; i < n; i++)
scanf("%d", &b[i]);
sort(b, b + n, cmp);
ans = 25;
for(int i = 0; i < n; i++)
{
if(b[i] > a) continue;
dfs(i, a % b[i], 1);
}
if(ans != 25)
printf("%d\n", ans);
else
puts("-1");
}
}
return 0;
}

浙公网安备 33010602011771号