位向量法 (白书P188)

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int ans[6],n;

void dfs(int cnt)
{
	int i,j;
	if(cnt==n) {
		for(i=0;i<n;i++) if(ans[i]) cout<<i<<" ";
		cout<<endl;
		return ;
	}
	ans[cnt]=1;
	dfs(cnt+1);
	ans[cnt]=0;
	dfs(cnt+1);
}

int main()
{
	while(cin>>n) {
		memset(ans,0,sizeof(ans));
		dfs(0);
	}
	return 0;
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-14 16:17:48

位向量法 (白书P188)的相关文章

增量构造法 (白书P188)

#include<iostream> #include<cstdio> using namespace std; int ans[6]; int n; void dfs(int cnt) { int i,j; for(i=0;i<cnt;i++) cout<<ans[i]<<" "; if(cnt) cout<<endl; int s=cnt?ans[cnt-1]+1:0; for(i=s;i<n;i++) { a

6.12白书第五章图论总结——司雨寒

之前我的图论一直都是DFS一下,BFS一下,求个欧拉回路,拓扑排个序这种渣渣水平. 终于鼓起勇气拾起白书第五章的东西. 学(bei)习(song)了一下求双连通分量,二分图的判定,强连通分量,2-SAT. DFS加上时间戳这个东西,很强大. 最后刷了白书上的例题: BCC: LA3523 可以参加会议的是双联通分量上的奇圈 1 #include <cstdio> 2 #include <cstring> 3 #include <algorithm> 4 #include

Uva10474-STL水题-白书

白书的一道水题.话说好久没认真做难题了.今天出了排名,所有队伍里倒数第一啊! 代码没什么可说的了. #include <algorithm> #include <cstring> #include <ctype.h> #include <cstdlib> #include <cstdio> #include <vector> #include <string> #include <queue> #include

白书 5.4.3 果园的里的树

果园里的树排列成矩阵.他们的x和y的坐标均是1~99的整数.输入若干个三角形,依次统计每个三角形内部和边界上共有多少棵树. 输入: 1.5  1.5       1.5  6.8      6.8  1.5 10.7  6.9     8.5  1.5      14.5  1.5 此题用三角形有向面积来解,求有向面积2倍的函数为: double area(double x0,double y0,double x1,double y1,double x2,double,y2) { return

白书 5.4.4 多少块土地

此题初识欧拉公式 V - E + F = 2. 其中V是顶点(即所有线段的断点数加上交点数),E是边数(即n段椭圆弧加上这些线段被切成的段数),F是面数(即土地块数加上椭圆外那个无穷大的面). ------------------------------------------------------------------------------------------------------- 有一块椭圆的地,你可以在边界上选n个点,并两两连接得到n(n-1)/2条线段.它们最多能把土地分成

位向量法构造子集

/*子集生成位向量法*/ #include<cstdio> int B[20]; 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; print_subset(n,B,cur+1); B[cur]=0; print_sub

【算法竞赛入门经典】7.3子集生成【增量构造法】【位向量法】【二进制法】

7.3.1增量构造法 思路:一次选出一个元素放到集合中.自己对于递归的理解还是不够,这里虽然没有明确给出递归停止条件,但是如果无法继续添加元素,就不会再继续递归,然后就是我头疼的回溯啦. #include<stdio.h> int num[4],n; void A(int n,int *a,int ans) { for(int i = 0; i < ans; i ++)//打印当前元素 printf("%d ",a[i]); printf("\n"

白书 第九章 例 9.24 复制书稿 题解

题目解法: 题解 白书 第九章 例 9.24 复制书稿 题解,码迷,mamicode.com

分数化小数(decimal) 白书习题 2-5

1 /* 2 分数化小数(decimal) 白书习题 2-5 3 输入正整数 a , b , c , 输出 a/b 的小数形式,精确到小数点后 c 位 .a,b<=10^6 , c <= 100. 4 输入包含多组数据,结束标志为 a = b = c = 0 ; 5 */ 6 #include<stdio.h> 7 int main() 8 { 9 int a,b,c,y; //y用来存储 a/b 的余数 10 while(scanf("%d%d%d",&