问题
相邻的bit个数
当前有0和1构成的数列S。S的第一个数是a1, 最后的数是an。S的相邻bit数可以按如下方式求得:
a1a2 + a2a3 + a3a4 + ...
利用这个公式可以求得数列S中相邻的1的个数。比如说011111101的相邻bit个数为5,11110110是4, 1010101是0。
当给出数列S的长度N和K时,请求一下长度为 N的数列中,相邻的bit个数为K的数列S。
输入
第一行给出N和K。(0 ≤ K < N ≤ 1,000)
输出
第一行输出满足条件的数列S的个数除以100,000,000的余数。
案例输入
5 2
案例输入
6
案例说明
有11100,01110, 00111, 10111, 11101, 11011。
#include<stdio.h>
#define MAX 101
int D[MAX][MAX][20];
int main(){
int n,k;
int i,j;
int t;
int tc;
D[1][0][0]=1;
D[1][0][1]=1;
n=100;
for(i=2;i<=n;i++){
for(j=0;j<i;j++){
D[i][j][0]=D[i-1][j][0]+D[i-1][j][1];
D[i][j][1]=D[i-1][j][0]+D[i-1][j-1][1];
}
}
scanf("%d",&t);
for (tc = 0; tc < t; tc++){
scanf("%d%d", &n, &k);
printf("%d\n", D[n][k][0] + D[n][k][1]);
}
return 0;
}