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

BestCoder #49 Untitled HDU 5339

时间:2015-08-02 01:02:17      阅读:131      评论:0      收藏:0      [点我收藏+]

标签:acm   bestcoder   


BestCoder #49 Untitled  HDU 5339


题目: http://acm.hdu.edu.cn/showproblem.php?pid=5339


本题采用深搜, 数据量小,先做排序处理(降序), 然后深搜的时候,进行剪枝,比K大的数就没必要往后搜索,直接剪掉。


#include <iostream>
#include <algorithm>
#include <cstdio>

using namespace std;

const int INF = 200;
int arr[20+5] = {};

void dfs(int t, int n, int k, int &ans)
{
    if (k==0)
    {
        ans = min(ans, t);
        return;
    }

    if (t < n)
    {
        if (k%arr[t] == 0)
        {
            ans = min(ans, t+1);
        }
        else if (k > arr[t])    // 要做剪枝处理, 大于k 就没必要往后处理了
        {
            dfs(t+1, n, k%arr[t], ans);
            dfs(t+1, n, k, ans);
        }
    }
}

inline bool cmp(const int &a, const int &b)
{
    return a > b;
}

int main(void)
{
    //freopen("in.txt", "r", stdin);

    int t = 0;
    cin>>t;
    while(t--)
    {
        int n, k;
        cin>>n>>k;

        int zero = 0;      // 如果输入数据含有 k 的因子,那么结果肯定是 1
        int v = 0;
        int j = 0;
        for(int i=0; i<n; ++i)
        {
            scanf("%d", &v);

            if (k%v == 0)
                zero = 1;
            if (v < k)
                arr[j++] = v;
        }

        if (zero == 1)
        {
            printf("1\n");
            continue;
        }

        sort(arr, arr+j, cmp);      // order by DESC
        //printf("%d\n", arr[0]);

        int ans = INF;
        dfs(0, j, k, ans);
        printf("%d\n", ans==INF ? -1: ans);

    }

    return 0;
}




版权声明:本文为博主原创文章,未经博主允许不得转载。 http://blog.csdn.net/core__code

BestCoder #49 Untitled HDU 5339

标签:acm   bestcoder   

原文地址:http://blog.csdn.net/core__code/article/details/47193943

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