w****w 发帖数: 521 | 1 [0,1,2],[3,4,5],[6,7,8,9],[0,3,6],[1,4,7],[2,5,8]
(8, 9) 001001
(7, 8) 001011
(7, 9) 001010
(6, 7) 001110
(6, 8) 001101
(6, 9) 001100
(5, 6) 011101
(5, 7) 011011
(5, 8) 011001
011001 (5, 8) (5, 9)
(5, 9) 011001
(4, 5) 010011
(4, 6) 011110
(4, 7) 011010
011011 (5, 7) (4, 8)
(4, 8) 011011
011010 (4, 7) (4, 9)
(4, 9) 011010
(3, 4) 010110
(3, 5) 010101
(3, 6) 011100
011110 (4, 6) (3, 7)
(3, 7) 011110
011101 (5, 6) (3, 8)
(3, 8) 011101
011100 (3, 6) (3, 9)
(3, 9) 011100
(2, 3) 110101
(2, 4) 110011
(2... 阅读全帖 |
|
p********s 发帖数: 37 | 5 有个非常浪费空间的递推,大牛们看看对不:
设cmb(n,m)为从n个里面选m个并按要求的顺序解集合,其中每个解用一个长度n的
bitset,其中m个1表示元素是否出现,比如
(3,2) 011 110 101
(4,2) 0011 0110 0101 1100 1010 1001
有
cmb(n,n) = n个1
cmb(n,0) = n个0
设[cmb(n,m)+'a']为给所有cmb(n,m)末尾加个a(1或0),
设~[x]为[x]的倒序,有
cmb(n,m) = [cmb(n-1,m)+'0'] + ~[cmb(n-1,m-1)+'1']
代码如下
vector all[50][50];
void init() {
for(int i = 1; i < 20; i++) {
all[i][0].push_back(0);
all[i][i].push_back((1 << i) - 1);
for(int j = 1; j < i; j++) {
for(int k = 0; ... 阅读全帖 |
|