第5周第一次练习,dp题。

来源:互联网 发布:数据有效性设置日期 编辑:程序博客网 时间:2024/05/23 23:44

For a string of n bits x1,x2,x3,...,Xn the adjacent bit count of the string (AdjBC(x)) is given by


X1*X2 + X2*X3 + X3*X4 + ... + Xn-1 * Xn


which counts the number of times a 1 bit is adjacent to another 1 bit. For example:
AdjBC(011101101) = 3
AdjBC(111101101) = 4
AdjBC(010101010) = 0

Write a program which takes as input integers n and k and returns the number of bit strings x of n bits (out of 2ⁿ) that satisfy AdjBC(x) = k. For example, for 5 bit strings, there are 6 ways of getting AdjBC(x) = 2:
11100, 01110, 00111, 10111, 11101, 11011

Input

The first line of input contains a single integer P, (1 ≤ P ≤ 1000), which is the number of data sets that follow. Each data set is a single line that contains the data set number, followed by a space, followed by a decimal integer giving the number (n) of bits in the bit strings, followed by a single space, followed by a decimal integer (k) giving the desired adjacent bit count. The number of bits (n) will not be greater than 100 and the parameters n and k will be chosen so that the result will fit in a signed 32-bit integer.

Output

For each data set there is one line of output. It contains the data set number followed by a single space, followed by the number of n-bit strings with adjacent bit count equal to k.

Example

Input:101 5 22 20 83 30 174 40 245 50 376 60 527 70 598 80 739 90 8410 100 90 
Output: 1 62 634263 18612254 1682125015 448747646 1609167 229373088 991679 1547610 23076518
一道DP题,用d[i][t][0]表示前i个字符串的AdjBC值为t,且最末尾位为0,同理,d[i][t][1]表示最末尾为1

则从这状态出发到下一状态,可得到三个不同的状态d[i+1][t][0],d[i+1][t][1],d[i+1][t+1][1]。列出式子即可。


#include<stdio.h>   #include<string.h>int d[101][101][2];int main()  {          int T,m,n,i,t,j;scanf("%d",&T);while(T--){scanf("%d%d%d",&j,&n,&m);memset(d,0,sizeof(d));d[1][0][0]=d[1][0][1]=1;for(i=1;i<=n;i++)for(t=0;t<=m;t++){d[i+1][t][0]+=d[i][t][0]+d[i][t][1];d[i+1][t+1][1]+=d[i][t][1];d[i+1][t][1]+=d[i][t][0];}int ans=d[n][m][0]+d[n][m][1];printf("%d %d\n",j,ans);}    return 0;  }  


0 0