Stringsobits
Kim Schrijvers
Consider an ordered set S of strings of N (1 <= N <= 31) bits. Bits, of course, are either 0 or 1.
This set of strings is interesting because it is ordered and contains all possible strings of length N that have L (1 <= L <= N) or fewer bits that are `1'.
Your task is to read a number I (1 <= I <= sizeof(S)) from the input and print the Ith element of the ordered set for N bits with no more than L bits that are `1'.
PROGRAM NAME: kimbits
INPUT FORMAT
A single line with three space separated integers: N, L, and I.
SAMPLE INPUT (file kimbits.in)
5 3 19
OUTPUT FORMAT
A single line containing the integer that represents the Ith element from the order set, as described.
SAMPLE OUTPUT (file kimbits.out)
10011
解题思路:
1、用一个二维数组cnt[i][j]来记录长度为i的,包含不多于j个1的二进制串的个数,这一步可以这样实现:当j = 0,cnt[i][j] = 1; 当j > i,cnt[i][j] = cnt[i][i];其他情况cnt[i][j] = cnt[i - 1][j] + cnt[i - 1][j - 1]。
2、假设s是第k个长度为i的,包含不多于j个1的二进制串,那么,在长度为i + 1的,包含不多于j + 1个1的二进制串中,0s是第k个,1s是第(k + cnt[i][j])个,利用这个思路的逆向, 我们就可以按顺序输出整个串。
位串生成算法

本文介绍了一种用于生成特定条件下的二进制字符串集合的算法。该算法能够根据给定的长度N和最大1的数量L,生成所有可能的有序二进制字符串,并能够找到指定索引I对应的字符串。

1988

被折叠的 条评论
为什么被折叠?



