HDU 5339 Untitled

题意:有一个整数a和n个整数b1,…,bn。在这些数中选出若干个数并重新排列,得到1,…,cr。我们想保证a mod c​1​​ mod c​2 mod… mod c​r=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
", ans);
            else
                puts("-1");
        }
    }
    return 0;
}

  

原文地址:https://www.cnblogs.com/Apro/p/4695531.html