您的位置:首页 > 其它

codevs 4064 组合 x

2017-06-22 10:08 197 查看

很久之前发过啦~不过删掉了...再发一下

4064 组合

 时间限制: 1 s

 空间限制: 256000 KB

 题目等级 : 黄金 Gold

题解

 查看运行结果

题目描述 Description

组合就是从n个元素中抽出r个元素(不分顺序且r < = n),我们可以简单地将n个元素理解为自然数1,2,…,n,从中任取r个数。 

例如n=5,m=3所有组合为:

1 2 3

1 2 4

1 2 5

1 3 4

1 3 5

1 4 5

2 3 4

2 3 5

2 4 5

3 4 5

输入描述 Input Description

输入两个正整数n,m。

输出描述 Output Description

输出n个数抽选r的所有抽法。

样例输入 Sample Input

5 3

样例输出 Sample Output

1 2 3

1 2 4

1 2 5

1 3 4

1 3 5

1 4 5

2 3 4

2 3 5

2 4 5

3 4 5

 

 

数据范围及提示 Data Size & Hint

m<=n<=8

思路:裸的深搜2333

坑点:数组范围要开的稍大一点,不然会RE

代码:

#include <iostream>
#include <cstdio>
#include <cstring>

using namespace std;

int n,r,cnt;
bool v[999];
int ans[999];

void print()
{
for(int i=1;i<=cnt;i++)
{
printf("%d ",ans[i]);
}
printf("\n");
}

void dfs(int now)
{
v[now]=1;
ans[++cnt]=now;
if(cnt==r) print();
for(int i=1;i<=n;i++)///find r (ge) number
{
if(!v[i] && i>now)
{
dfs(i);
v[i]=0;
cnt--;
}
}
}

int main()
{
scanf("%d%d",&n,&r);
int Ms=n-r+1;
for(int i=1;i<=Ms;i++)
{
memset(v,0,sizeof(v));
memset(ans,0,sizeof(ans));
cnt=0;
dfs(i);
}
return 0;
}
View Code

 

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: