可以直接把前K-1个罗盘全部忽略了,因为移动前K-1个罗盘不会影响第K个。
也就是相当于只移动剩下的n-k-1个罗盘,当只移动第k个罗盘时,f(k)=1;当要哟东第k个和第k+1个时,就必须先把第k个移移到另一个罗盘,再把k+1移到另外一个,最后把第k个移到k+1上面,因此f(k+1)=f(k)+f(k),以此类推f(k+x)=2*f(k+x-1)。
得到公式:ans=2^(n-k)
AC代码:
#include<cstdio>
typedef long long LL;
const int maxn=65;
LL w[maxn];
void Init(){
w[0]=1;
for(int i=1;i<=60;++i) w[i]=w[i-1]*2;
}
int main(){
Init();
int T,n,m;
scanf("%d",&T);
while(T--){
scanf("%d%d",&n,&m);
printf("%lld\n",w[n-m]);
}
return 0;
}
如有不当之处欢迎指出!