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

hdu5339Untitled 暴搜

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

标签:暴搜

//给一个数a和一个数组b
//问从数组选最少个数数ci使得a mod c1 mod c2 mod… mod cr=0
//由于b的长度<=20 先从大到小排序,然后直接暴搜就行
#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
using namespace std ;
const int maxn = 30;
int b[maxn] ;
int n ;
int ans = 100 ;
int len ;
int num;int a[maxn] ;
void dfs(int pos)
{
    if(pos == n+1)
    {
        int t = num ;
        for(int i = 1;i <= len;i++)
        t %= b[i] ;
        if(t == 0) ans = min(ans , len) ;
        return ;
    }
    dfs(pos+1) ;
    b[++len] = a[pos] ;
    dfs(pos+1) ;
    len-- ;
}
bool cmp(int a , int b)
{
    return a > b ;
}
int main()
{
    int T ;
    scanf("%d" ,&T) ;
    while(T--)
    {
        scanf("%d%d" , &n , &num) ;
        for(int i  =1;i <= n;i++)
        scanf("%d" , &a[i]) ;
        sort(a + 1, a + n + 1 ,cmp) ;
        len = 0 ;ans = 100;
        dfs(1) ;
        if(ans == 100)
        puts("-1") ;
        else
        cout<<ans<<endl;
    }
}




版权声明:本文为博主原创文章,未经博主允许不得转载。

hdu5339Untitled 暴搜

标签:暴搜

原文地址:http://blog.csdn.net/cq_pf/article/details/47205667

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