我写的第一个dfs-南阳oj-组合数

组合数

时间限制:3000 ms  |  内存限制:65535 KB

难度:3

描述
找出从自然数1、2、... 、n(0<n<10)中任取r(0<r<=n)个数的所有组合。
输入
输入n、r。
输出
按特定顺序输出所有组合。
特定顺序:每一个组合中的值从大到小排列,组合之间按逆字典序排列。
样例输入
5 3
样例输出
543
542
541
532
531
521
432
431
421
321
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;

int n, r;
int book[11],a[15];
void dfs(int step,int n, int r)
{
    if(step == r)
    {
        for(int i = 0; i < r; i++)
            printf("%d",a[i]);
            printf("\n");
            return;
    }
    for(int i = n; i > 0; i --)
    {
        if(book[i] == 0)
        {
            if(step == 0)
              a[step] = i;
            else
              if(i < a[step-1])
                a[step] = i;
            else
                continue;
            book[i] = 1;
            dfs(step+1,n,r);
            book[i] = 0;
            printf("b");
        }
    }

}
int main()
{
    int n, r;
    memset(book,0,sizeof(book));
    scanf("%d%d",&n,&r);
    dfs(0,n,r);
    return 0;
}

时间: 2024-10-13 20:17:59

我写的第一个dfs-南阳oj-组合数的相关文章

【南阳OJ分类之语言入门】80题题目+AC代码汇总

声明: 题目部分皆为南阳OJ题目. 代码部分包含AC代码(可能不止一个)和最优代码,大部分都是本人写的,并且大部分为c代码和少部分c++代码and极少java代码,但基本都是c语言知识点,没有太多差别,可能代码有的写的比较丑,毕竟知识有限. 语言入门部分题基本都较为简单,是学习编程入门的很好练习,也是ACM的第一步,入门的最佳方法,望认真对待. 本文由csdn-jtahstu原创,转载请注明出处,欢迎志同道合的朋友一起交流学习.本人QQ:1373758426和csdn博客地址. now begi

【南阳OJ分类之大数问题】题目+AC代码汇总

声明:题目部分皆为南阳OJ题目,代码部分包含AC代码(可能不止一个)和标程. 由于大数问题用c/c++写比较麻烦,而Java的大数类又很好用,所以基本为java代码.实际上竞赛很少会考大数问题,因为竞赛是比的算法,而不是语言特性,不过很多都是大数据,数据上千万级别的,所以算法又很关键,显然那和这篇博客也没啥关系. 题目不是太难,大家和本人就权当学习或复习下Java吧O(∩_∩)O~. 该分类南阳oj地址:http://acm.nyist.edu.cn/JudgeOnline/problemset

站点高并发写问题的一个解决实践

站点高并发写问题的一个解决实践 我负责一个基于Yii的lamp站点维护和优化,其中有一个表的并发写很高,导致用户体验差,甚至写失败造成数据丢失,分析后发现这个表其实并发读要求很低,所以计划将写记录到log中,定期将log写入mysql. log4php在yii中使用 log4php是Apache的一个log框架,下载下来的库,放在与yii中protected一个目录下.修改配置log4php/config.php,这个是php数组格式的配置信息,我们希望将记录写入文件,并按照小时来切分,如: <

菜鸟写的第一个chrome插件

一.新建一个文件夹,用来放插件的代码 二.首先新建配置文件manifest.json 1 // 开发参考:http://open.chrome.360.cn/extension_dev/overview.html 2 // 字段说明参考:http://open.chrome.360.cn/extension_dev/manifest.html 3 { 4 "name": "myTB Name", // 必填 5 "version": "

【算法学习笔记】61.回溯法 DFS SJTU OJ 1106 sudoku

虽然DLX可以提高效率....但是对于NPC问题也不用太追求效率了,而且还只有一个测试点. 所以 只要DFS不断的填入,直到空格全部被填满:要注意的是DFS中全局变量的更新和恢复. 至于存储的方法,只要考虑每一行每一列每一个小块的不重复即可. #include <iostream> #include <cstring> using namespace std; int cnt = 0 ;//表示剩余的要填的空格的数目 struct point { int x,y; }; point

centos分配IP脚本--写的第一个shell脚本

IDC小菜鸟一枚,非科班出身.常常有客户的centos服务器需要分配15个IP甚至30个IP.每次需要手动分配十分麻烦,于是花了一天时间学了shell脚本,写了这个脚本. #!/bin/bash read -p "The IP numbers: " num while [[ $num -gt 0 ]] do read -p "Please enter IP Address :" ipaddr touch /etc/sysconfig/network-scripts/

自己写的第一个while循环之死循环

很久不来了,不是因为放弃了Linux,而是要准备编制考试,暂别Linux.但是最近脑子里还是有之前自己为自己设定的小愿望,写一个死循环,今天突然有了点所谓的灵感,把代码写出来了: #!/bin/bash # upTime=`date +%s` sum=0 add=1 while [ $upTime -gt 0 ];do let sum+=$add sleep 1 echo $sum done 用现在的总秒数时间来和0比较,因为该变量永远大于0,内在机制是时间永远不会倒流,至少一般情况下机器时间不

写chrome插件---一个优酷自动加粉丝助手

写chrome插件主要就是写js , 我们要构造界面(HTML), 以及样式(CSS),  以及chrome给我们提供的jsAPI, 主要是chrome的API, 调试的话可以使用chrome的开发者工具(f12)直接调试; API地址的截图先过一遍, 这个非常重要: 如果从来没写过chrome插件, 我们可以参考这个打开, 里面有很多现成的DEMO, 我们能够直接在线看一些简单的DEMO代码: 我写的这个youku自动订阅助手使用了bootstrap和jQ(个人认为是标配,(●'?'●)),也

南阳OJ独木舟上的旅行

 /*独木舟上的旅行 时间限制:3000 ms  |  内存限制:65535 KB 难度:2 描述 进行一次独木舟的旅行活动,独木舟可以在港口租到,并且之间没有区别. 一条独木舟最多只能乘坐两个人,且乘客的总重量不能超过独木舟的最大承载量. 我们要尽量减少这次活动中的花销,所以要找出可以安置所有旅客的最少的独木舟条数. 现在请写一个程序,读入独木舟的最大承载量.旅客数目和每位旅客的重量. 根据给出的规则,计算要安置所有旅客必须的最少的独木舟条数,并输出结果. 输入第一行输入s,表示测试数据的

南阳OJ 中缀式变后缀式

 /*中缀式变后缀式 时间限制:1000 ms  |  内存限制:65535 KB 难度:3 描述 人们的日常习惯是把算术表达式写成中缀式,但对于机器来说更"习惯于"后缀式, 关于算术表达式的中缀式和后缀式的论述一般的数据结构书都有相关内容可供参看, 这里不再赘述,现在你的任务是将中缀式变为后缀式. 输入第一行输入一个整数n,共有n组测试数据(n<10). 每组测试数据只有一行,是一个长度不超过1000的字符串,表示这个运算式的中缀式, 每个运算式都是以"=&quo