题意:有一组编码,用其中最少的位数来区分这些编码。
思路:相当于枚举一个集合的所有子集,然后选择符合要求的势最小的集合。
子集生成有三种方法,但每一种子集的生成都没有明显的规律,至少不是从1个元素、2个元素到n个元素这样的顺序生成的,所以还是要枚举出所有的子集才行。这里用的增量构造法来枚举子集。
Code:
#include
void print_subset(i...
分类:
其他好文 时间:
2015-02-26 13:26:43
阅读次数:
112
生成{0,1,2,3,...,n-1} 所有子集的三种方法
#include
#include
using namespace std;
const int N = 10005;
//增量构造法
//void psubset(int n, int *a, int cur)
//{
// for(int i = 0; i < cur; ++i) printf("%d ", a[i]);
...
分类:
其他好文 时间:
2014-11-19 18:37:15
阅读次数:
134
给你一个可比较大小顺序的集合,让你生成所有按照字典序排列的子集,本文借鉴自刘汝佳算法入门经典。
方法一:
增量构造法:一次选取一个元素到集合中。
#include
using namespace std;
int a[20];
/*递归输出n以内所有的子集,其中cur为当前下标,初始值0*/
void print_subset(int n,int* a,int cur){
for (in...
分类:
其他好文 时间:
2014-10-15 22:04:01
阅读次数:
262
(一)增量构造法
#include
#include
using namespace std;
const int MAXN = 1000;
int A[MAXN], n;
void print_subset(int n, int *A, int cur) {
for(int i = 0; i < cur; ++i) cout << A[i] << " ";
cout << endl...
分类:
其他好文 时间:
2014-07-04 08:06:43
阅读次数:
224