HDU 5339-Untitled(dfs)

来源:互联网 发布:php微信服务号开发教程 编辑:程序博客网 时间:2024/04/28 08:20

题目地址:HDU 5339
题意:给出n个数和一个数a,问a对其中的一些数取余(可以为n个数),是否a能等于0
思路:遍历枚举,每次找<=a的数,然后取余,一直到最后看是否为0
代码被人叉了,数据水才是真的水,又做了一发搜索。

#include <stdio.h>#include <math.h>#include <string.h>#include <stdlib.h>#include <iostream>#include <sstream>#include <algorithm>#include <set>#include <queue>#include <stack>#include <map>#pragma comment(linker, "/STACK:102400000,102400000")using namespace std;typedef long long LL;const int inf=0x3f3f3f3f;const double pi= acos(-1.0);const double esp=1e-6;int s[30];int cmp(int a,int b){    return a>b;}int main(){    int T,n,a;    int ans;    int cnt;    scanf("%d",&T);    while(T--){        scanf("%d %d",&n,&a);        ans=inf;        cnt=0;        memset(s,0,sizeof(s));        for(int i=0;i<n;i++)            scanf("%d",&s[i]);        sort(s,s+n,cmp);        for(int i=0;i<n;i++){                if(a>=s[i]){                    a%=s[i];                    cnt++;                    if(a==0){                        ans=min(ans,cnt);                        break;                    }                }        }        //printf("cnt=%d\n",cnt);        if(ans==inf)            puts("-1");        else            printf("%d\n",ans);    }    return 0;}/*22 92 72 96 72-1*/

正确无×

#include <stdio.h>#include <math.h>#include <string.h>#include <stdlib.h>#include <iostream>#include <sstream>#include <algorithm>#include <set>#include <queue>#include <stack>#include <map>#pragma comment(linker, "/STACK:102400000,102400000")using namespace std;typedef long long LL;const int inf=0x3f3f3f3f;const double pi= acos(-1.0);const double esp=1e-6;int s[30];int minn;void dfs(int a,int t,int k){    if(!a)    {        minn=min(minn,k);        return ;    }    for(int i=t-1;i>=1;i--)        if(a>=s[i])            dfs(a%s[i],i,k+1);}int main(){    int T,n,a,i;    scanf("%d",&T);    while(T--){        minn=inf;        scanf("%d %d",&n,&a);        for(i=1;i<=n;i++){            scanf("%d",&s[i]);        }        sort(s+1,s+n+1);        dfs(a,n+1,0);        if(minn==inf)            puts("-1");        else            printf("%d\n",minn);    }    return 0;}/*13 109 8 2*/
1 0
原创粉丝点击