不久前看了会递归,发现有些题目的构思与记忆中的不太一样,所以借此篇博文来分享下心得和体会。以抛砖引玉,希望大家看完能有些许灵感。我用的是C++,但无伤大雅。
2985:数字组合

描述
有n个正整数,找出其中和为t(t也是正整数)的可能的组合方式。如:
n=5,5个数分别为1,2,3,4,5,t=5;
那么可能的组合有5=1+4和5=2+3和5=5三种组合方式。
输入
输入的第一行是两个正整数n和t,用空格隔开,其中1<=n<=20,表示正整数的个数,t为要求的和(1<=t<=1000)
接下来的一行是n个正整数,用空格隔开。
输出
和为t的不同的组合方式的数目。
样例输入
5 5
1 2 3 4 5
样例输出
3
首先,我们先来分析下此题给我们的数据范围 t为正整数,1<=n<=20,数据范围很小,所以
我们其实可以直接用递归,不用动态规划也行。
思路:每个数,我们都只有两个状态:取它 亦或 不取,所以我们可以设dd(i,j)
表示在前i个数字中能组合成i的种数。
所以,我们能很轻松的写出递归的方程: dd(i-1,j)+dd(i-1,j-a[i]);
这表示 第i个数不取时的种数+取了第i个数的种数。

好了,看到这。相信大家 神经会急促一闪,这不就是 经典题目放苹果吗。
但是,这不一样。`具体题目要具体分析。

#include<iostream>
using namespace std;int a[22],dp[25][1010];
int dd(int i,int j){if(j==0)return 1;//边界条件
if(i==1){if(a[i]==j)
return 1;
else return 0;
}
if(a[i]>j)return dd(i-1,j);//当第i个数>组合数,那肯定不能取了
return dd(i-1,j)+dd(i-1,j-a[i]);
}
int main(){int n,t;cin>>n>>t;//输入for(int i=1;i<=n;i++)cin>>a[i];
cout<<dd(n,t);//输出
return 0;
}

总之,递归是一个抽象的过程,我们要做的,就是把思路一步步清晰的用代码写出来。
而不是打着要“完全弄懂”的旗号,一股脑的钻进递归中验证出不来了,把自己都会弄的头大
*

C++——递归之数字组合相关推荐

  1. Bailian4004 数字组合【递归+DP】

    4004:数字组合 总时间限制: 1000ms 内存限制: 65536kB 描述 有n个正整数,找出其中和为t(t也是正整数)的可能的组合方式.如: n=5,5个数分别为1,2,3,4,5,t=5: ...

  2. 36 数字组合(Combination Sum)

    文章目录 1 题目 2 解决方案 2.1 思路 2.2 图解 2.3 时间复杂度 2.4 空间复杂度 3 源码 1 题目 题目:数字组合(Combination Sum) 描述:给定一个候选数字的集合 ...

  3. LintCode 数字组合 题解

    数字组合 描述 笔记 数据 评测 给出一组候选数字(C)和目标数字(T),找到C中所有的组合,使找出的数字和为T.C中的数字可以无限制重复被选取. 例如,给出候选数组[2,3,6,7]和目标数字7,所 ...

  4. 在1到100中找出所有和为100的数字组合

    这是我今天听到的一道题,感觉很有意思,和大家分享一下,核心思想是递归和不降序组合.话不多说,直接上代码. #include<stdio.h>//begin是开头的数字,end是剩余数字想要 ...

  5. 组合学:26个字母(含大小写)和10个数字组合为4位串的可能性测算

    使用26个字母(含大小写,实际为52个字母)和10个数字组合一个4位的串码,问有多少种组合? 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k' ...

  6. python编程实战(二):一文教你生成随机验证码!大小写字母与数字组合,位数可以控制

    随机验证码的生成 前言 正文 实现 代码 效果 前言 验证码验证,是常见的安全验证的一种方式,可以用来杜绝脚本和机器人操作等等: 除了本文介绍的简单的验证码之外,还有拼图验证.文字顺序验证等常见的验证 ...

  7. validate验证长度 vue_vue input 输入校验字母数字组合且长度小于30的实现代码

    下面一段代码给大家分享vue input 校验字母数字组合且长度小于30,具体代码如下所示: validateJyh(glhm){//校验关联交易号 var reg = /^[A-Za-z0-9]{1 ...

  8. 检索数据_20_按照字符串数字组合的排序

    按照字符串数字组合的排序 需求描述 需求:假设我们从雇员表emp里创建个视图,这里仅有一个字段,该字段叫data由员工名称和部门号拼接而成,我们想实现一个查询可以按照原来的部门编号逆序排序筛选出数据. ...

  9. python电话号码对应的字符组合_Python3 在字符串中提取字母+数字组合微信账号、电话等 - pytorch中文网...

    今天处理数据要提取字符串中的微信,字符串中包含中文英文Emoji,标点符号等. python 提取字符串中的电话 提取电话相对简单,多个电话也可以提取 import re desstr = " ...

最新文章

  1. SAP MM 公司间STO里交货单PGI之后自动触发内向交货单功能的实现
  2. javacore分析工具_「赵强老师」如何分析Java的内存溢出问题
  3. Linux下环境变量设置
  4. 最近整理关于SQL Server2005性能优化技巧
  5. 每天一道LeetCode-----某个数在递增序列第一次和最后一次出现的位置
  6. HDU - 7009 树上游走(树的直径+容斥)
  7. macos可以升级到指定版本吗_iOS14如期而至!重大更新的全新版本,值得升级吗?答案在这...
  8. python---(6)函数
  9. Introduction to Real-Time Kernels
  10. 火狐浏览器百度网盘服务器响应,火狐浏览器打不开百度网盘怎么解决?解决百度网盘打不开的步骤分享...
  11. python __builtins__ copyright类 (14)
  12. 二十九、layui分页插件的使用
  13. VS单步调试的无法进入断点、行号错乱等问题解决方法
  14. MySQL复制以及调优
  15. 喜马拉雅音频下载工具 支持免费音频/VIP音频 文尾有彩蛋
  16. Linux花生壳使用篇
  17. Mac下安装Adobe pr
  18. 史上最全计算机网络大纲
  19. 「 数学模型 」“使用SPSS软件线性回归分析”实例
  20. python_csv文件写入

热门文章

  1. JavaScript / Summary of Interview Questions
  2. tikz 折线 箭头_LaTeX技巧862:用 TikZ 实现带箭头的注释效果
  3. numpy 学习汇总5-数组运算 tcy
  4. 哈尔滨工业大学软件学院诚聘英才
  5. mysql默认字符编码设置教程:my.ini设置字符编码
  6. 【揭秘】云服务器1M带宽实际下载速度是多少?
  7. 小米电视2测评:蓝图远大,力不从心
  8. 关于华为设备ospf进程中RID重叠的问题
  9. app模式会被第三方平台模式取代吗_未来APP将取代移动网站? - 搜外问答
  10. Thymeleaf是干什么的