您的位置:首页 > 其它

hpuoj 1690 组合数【DFS】

2015-08-08 17:20 204 查看

问题 C: 组合数

时间限制: 3 Sec 内存限制: 128 MB

提交: 47 解决: 21

[提交][状态][讨论版]

题目描述

czy最近对组合数产生了浓厚的兴趣,一天他心血来潮,想排n个数字,但是很快他发现种类太多了,于是他决定从中随机找出m个数排,但还是太多了,所以他想请聪明的你写个程序帮助他找到所有种类的排列

输入

输入包括多组测试数据,每组包括一行整数n(1<=n<10),m(1<=m<=n),空格间隔

输出

按特定顺序输出所有组合。

特定顺序:每一个组合中的值从大到小排列,组合之间按逆字典序排列。

样例输入

5 3


样例输出

543
542
541
532
531
521
432
431
421
321

汗,关键时刻掉链子。黄会长讲的方法忘了,无奈换一种

#include<cstdio>
#include<cstring>
int a[15],arr[15];
int n,m;
void dfs(int pos,int tot)
{
if(tot>=m)
{
for(int i=0;i<m;++i)
printf("%d",a[i]);
printf("\n");
return ;
}
if(n-pos<m-tot)
return ;
for(int i=pos;i<n;++i)
{
a[tot]=arr[i];
dfs(i+1,tot+1);
}
}
int main()
{
while(~scanf("%d %d",&n,&m))
{
memset(arr,0,sizeof(arr));
memset(a,0,sizeof(a));
for(int i=0;i<n;++i)
arr[i]=n-i;
dfs(0,0);
}
return 0;
}

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