void print_subset(int n, int B[], int cur){
    if(cur == n){
        for(int i=0; i<n; i++) if(B[i]) printf("%d ",i);
        printf("\n");
        return;
    }
    B[cur] = 1; //choose element cur
    print_subset(n, B, cur+1);
    B[cur] = 0; //not to choose element cur
    print_subset(n, B, cur+1);
}
Ejemplo n.º 2
0
void print_subset(int n, int* B, int cur) {
  if(cur == n) {
    for(int i = 0; i < cur; i++)
      if(B[i]) printf("%d ", i); // 打印当前集合
    printf("\n");
    return;
  }
  B[cur] = 1; // 选第cur个元素
  print_subset(n, B, cur+1);
  B[cur] = 0; // 不选第cur个元素
  print_subset(n, B, cur+1);
}
Ejemplo n.º 3
0
int main(){
 int n ; 
 scanf("%d",&n);
 for(int i = 1;i < (1 << n) ;i ++)
	 print_subset(n,i);

return 0 ;
}
int main(){
    //freopen("time.txt","a",stdout);
    int n;
    scanf("%d",&n);
    for(int i=0; i<(1<<n); i++)
      print_subset(n, i);
    //printf("n=%d, way3 time used: %.6lfs\n",n, (double)clock()/CLOCKS_PER_SEC);
    return 0;
}
Ejemplo n.º 5
0
void print_subset(int n, int* A, int cur) {
  for(int i = 0; i < cur; i++) printf("%d ", A[i]); // 打印当前集合    
  printf("\n");
  int s = cur ? A[cur-1]+1 : 0; // 确定当前元素的最小可能值
  for(int i = s; i < n; i++) {
    A[cur] = i;
    print_subset(n, A, cur+1); // 递归构造子集
  }
}
//#include<ctime>
void print_subset(int n, int *A, int cur){
   for(int i=0; i<cur; i++) printf("%d ",A[i]);
   printf("\n"); //首行为空,代表空集
   int s = cur ? A[cur-1]+1 : 0;
   for(int i=s; i<n; i++){
       A[cur] = i;
       print_subset(n, A, cur+1);
   }
}
int main(){
   //freopen("time.txt","a",stdout);
   int n, A[maxn];
   //n = 30;
   scanf("%d",&n);
   print_subset(n, A, 0);
   //printf("n=%d, way1 time used: %.6lfs\n",n, (double)clock()/CLOCKS_PER_SEC);
   return 0;
}
Ejemplo n.º 8
0
int main()
{
	int n;
	while(scanf("%d",&n)!=EOF)
	{
		int *a=new int[n];
		//for(int i=1;i<=n;++i) a[i-1]=i;
		print_subset(n,a,0);
		delete a;
	}
	return 0;
} 
Ejemplo n.º 9
0
void print_subset(int n,int* a,int cur)
{
	/*for(int i=0;i<cur;++i) printf("%d ",a[i]);
	printf("\n");
	int s=cur?a[cur-1]+1:0;
	for(int i=s;i<n;++i)
	{
		a[cur]=i;
		print_subset(n,a,cur+1);
	}*/
	if(cur==n)
	{
		for(int i=0;i<cur;++i)
		{
			if(a[i]) printf("%d ",i);
		}
		printf("\n");
		return;
	}
	a[cur]=1;
	print_subset(n,a,cur+1);
	a[cur]=0;
	print_subset(n,a,cur+1);
}
Ejemplo n.º 10
0
int main() {
  print_subset(5, B, 0);
  return 0;
}
Ejemplo n.º 11
0
int topk(Bit **models, double *prob, int k, struct Var *vars, int n, int p)
{
  int rank; 	/* index */

  int tablesize;	/* Number of entries in the subset table. */
  int i, current, qsize, queuesize;
  Bit *model;		/* output for current model  */
  double *list;		/* The list of numbers (logits). */	  
  double *subsetsum;	/* Sum of some subset. */
  int *type;	/* How does subset differ from parent? */
  int *queue;	/* Subset number of item in priority queue. */
  int *parent;	/* Parent of given subset. */
  int *position;	/* Bit position of rightmost 1 bit. */
  int *pattern;	/* Subset that differs only in bit position. */
  char *bits;


  /* Ask for too many models? */
  if (log((double) k)/log((double) 2.0) > (double) n) {
    REprintf("Warning: Asked for %d models, but there are only 2^%d with non-zero prob.\n",
	k, n);
    k = 1<<n;
  }

  /*  Rprintf("Deterministic sample of (approx) top %d models\n", k); */

  list =  (double *) R_alloc(n, sizeof(double));
  for (i = 0; i < n; i++) list[i] = vars[i].logit;

  model = (unsigned char *) R_alloc(n, sizeof(Bit));

  qsize = 2*k;  /* Largest number of items in priority queue. */
  subsetsum = (double *) R_alloc(qsize, sizeof(double));	
  parent = (int *) R_alloc(qsize, sizeof(int));	
  type =(int *) R_alloc(qsize, sizeof(int));	
  position = (int *) R_alloc(qsize, sizeof(int));	
  pattern = (int *) R_alloc(qsize, sizeof(int));	
  queue = (int *) R_alloc(qsize, sizeof(int));	
  bits = (char *) R_alloc(n, sizeof(char));

  queuesize = 0;
  /* Store relevant information for root node. */
  for(i = 0; i < n; subsetsum[0] += list[i], i++)
    ;
   parent[0] = -1;
   position[0] = -1;
   type[0] = 0;
   tablesize = 1;
   pattern[0] = -1;

  print_subset(0, 0, models, model, subsetsum, pattern, position, n, vars, p);
  insert_children(0, list, subsetsum, queue, &queuesize, &tablesize,
		  parent,pattern, position,type, bits, n);

  for (rank = 1; rank < k-1; rank++) {
    current = get_next(subsetsum, queue, &queuesize); 
    print_subset(current, rank, models, model, subsetsum, pattern,
		 position, n, vars, p);  
    insert_children(current, list, subsetsum, queue, &queuesize, &tablesize,
		    parent, pattern, position, type, bits,n);
  }
  if (k > 1) print_subset(queue[0], k-1, models, model, subsetsum,
			  pattern, position, n, vars, p);	/* Last one. */

  return(k);
}