标签:
本来是坐了两题的,结果第二题被黑了,两题的时候排名room第三,真是吓到我了,说实话这次真是认真做的,结
果还不错虽然只过了一题,貌似没几个人过两题,BC就是这么坑,老是出这么难的题,而且这两次我做的都是递归结出来的,还都是三次递归。。。好多人爆零,我还是一如既往的一道题,好像从来都是一道题。。。继续努力
认真做题,认真做题,认真做题(重要的事说三遍)
思路:
这道题我没有排序,直接递归的因为层数是递增的,所以可以优先找到层数最少的,每次对小于当前的数取余就ok啦,然后继续递归它的余数,直到为0,这时候应该标记几下,让以后的递归都结束,因为已经找到了满足条件的最少序列。。。
贴代码:
<span style="font-family:Courier New;font-size:18px;">#include<stdio.h> #include<string.h> #include<stdlib.h> #include<limits.h> int n,Min,flag; int b[25]; void dfs(int x,int ans) { if(x == 0) { flag = 1; if(ans < Min) Min = ans; return ; } for(int i=0; i<n; i++) { if(b[i] <= x) { dfs(x%b[i],ans+1); } } return ; } int main() { int i,T,a; scanf("%d",&T); while(T--) { memset(b,0,sizeof(b)); flag = 0; Min = INT_MAX; scanf("%d%d",&n,&a); for(i=0; i<n; i++) { scanf("%d",&b[i]); } dfs(a,0); if(flag == 1) { printf("%d\n",Min); } else printf("-1\n"); } return 0; } </span>
版权声明:本文为博主原创文章,未经博主允许不得转载。
标签:
原文地址:http://blog.csdn.net/sinat_22659021/article/details/47204693