本来是坐了两题的,结果第二题被黑了,两题的时候排名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>