p********s 发帖数: 37 | 1 有个非常浪费空间的递推,大牛们看看对不:
设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; ... 阅读全帖 |
|