您的位置:首页 > 其它

hdu5339&bestcoder(#49)a题

2015-08-03 21:11 225 查看
题目大意:给定一个序列,要求从这个序列中挑出k个数字,使得n%a1%a2%a3....=0(顺序随你意)。求k的最小值。

解题思路:从大到小排个序(小的摸完了,大的就不能摸了),然后在枚举。

#include<cstdio>
#include<algorithm>
#include<cstring>
#include<iostream>
using namespace std;
const int maxn=20+5;
int b[maxn],t,n,a;
int ans;
int cmp(int a,int b)
{
        return a>b;
}
void  solve(int num,int cnt,int s)
{
        if(num>n)   return;
        int tmp;
        tmp=s%b[num];
        if(cnt>ans) return;
        if(tmp==0)  {ans=min(ans,cnt+1);return;}
       // cout<<num<<" "<<cnt<<" "<<s<<" "<<tmp<<endl;
        solve(num+1,cnt+1,tmp);
        solve(num+1,cnt,s);
}

int main()
{
        scanf("%d",&t);
        while(t--)
        {
                ans=(1<<30);
                scanf("%d%d",&n,&a);
                for(int i=1;i<=n;i++)
                        scanf("%d",b+i);
                sort(b+1,b+n+1,cmp);
                solve(1,0,a);
                if(ans!=(1<<30))  printf("%d\n",ans);
                else printf("-1\n");
        }
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: