码迷,mamicode.com
首页 > 其他好文 > 详细

HDU 5339 Untitled

时间:2015-08-02 13:13:31      阅读:97      评论:0      收藏:0      [点我收藏+]

标签:

题意:有一个整数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\n", ans);
            else
                puts("-1");
        }
    }
    return 0;
}

  

HDU 5339 Untitled

标签:

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!