C++——递归之数字组合
不久前看了会递归,发现有些题目的构思与记忆中的不太一样,所以借此篇博文来分享下心得和体会。以抛砖引玉,希望大家看完能有些许灵感。我用的是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++——递归之数字组合相关推荐
- Bailian4004 数字组合【递归+DP】
4004:数字组合 总时间限制: 1000ms 内存限制: 65536kB 描述 有n个正整数,找出其中和为t(t也是正整数)的可能的组合方式.如: n=5,5个数分别为1,2,3,4,5,t=5: ...
- 36 数字组合(Combination Sum)
文章目录 1 题目 2 解决方案 2.1 思路 2.2 图解 2.3 时间复杂度 2.4 空间复杂度 3 源码 1 题目 题目:数字组合(Combination Sum) 描述:给定一个候选数字的集合 ...
- LintCode 数字组合 题解
数字组合 描述 笔记 数据 评测 给出一组候选数字(C)和目标数字(T),找到C中所有的组合,使找出的数字和为T.C中的数字可以无限制重复被选取. 例如,给出候选数组[2,3,6,7]和目标数字7,所 ...
- 在1到100中找出所有和为100的数字组合
这是我今天听到的一道题,感觉很有意思,和大家分享一下,核心思想是递归和不降序组合.话不多说,直接上代码. #include<stdio.h>//begin是开头的数字,end是剩余数字想要 ...
- 组合学:26个字母(含大小写)和10个数字组合为4位串的可能性测算
使用26个字母(含大小写,实际为52个字母)和10个数字组合一个4位的串码,问有多少种组合? 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k' ...
- python编程实战(二):一文教你生成随机验证码!大小写字母与数字组合,位数可以控制
随机验证码的生成 前言 正文 实现 代码 效果 前言 验证码验证,是常见的安全验证的一种方式,可以用来杜绝脚本和机器人操作等等: 除了本文介绍的简单的验证码之外,还有拼图验证.文字顺序验证等常见的验证 ...
- validate验证长度 vue_vue input 输入校验字母数字组合且长度小于30的实现代码
下面一段代码给大家分享vue input 校验字母数字组合且长度小于30,具体代码如下所示: validateJyh(glhm){//校验关联交易号 var reg = /^[A-Za-z0-9]{1 ...
- 检索数据_20_按照字符串数字组合的排序
按照字符串数字组合的排序 需求描述 需求:假设我们从雇员表emp里创建个视图,这里仅有一个字段,该字段叫data由员工名称和部门号拼接而成,我们想实现一个查询可以按照原来的部门编号逆序排序筛选出数据. ...
- python电话号码对应的字符组合_Python3 在字符串中提取字母+数字组合微信账号、电话等 - pytorch中文网...
今天处理数据要提取字符串中的微信,字符串中包含中文英文Emoji,标点符号等. python 提取字符串中的电话 提取电话相对简单,多个电话也可以提取 import re desstr = " ...
最新文章
- SAP MM 公司间STO里交货单PGI之后自动触发内向交货单功能的实现
- javacore分析工具_「赵强老师」如何分析Java的内存溢出问题
- Linux下环境变量设置
- 最近整理关于SQL Server2005性能优化技巧
- 每天一道LeetCode-----某个数在递增序列第一次和最后一次出现的位置
- HDU - 7009 树上游走(树的直径+容斥)
- macos可以升级到指定版本吗_iOS14如期而至!重大更新的全新版本,值得升级吗?答案在这...
- python---(6)函数
- Introduction to Real-Time Kernels
- 火狐浏览器百度网盘服务器响应,火狐浏览器打不开百度网盘怎么解决?解决百度网盘打不开的步骤分享...
- python __builtins__ copyright类 (14)
- 二十九、layui分页插件的使用
- VS单步调试的无法进入断点、行号错乱等问题解决方法
- MySQL复制以及调优
- 喜马拉雅音频下载工具 支持免费音频/VIP音频 文尾有彩蛋
- Linux花生壳使用篇
- Mac下安装Adobe pr
- 史上最全计算机网络大纲
- 「 数学模型 」“使用SPSS软件线性回归分析”实例
- python_csv文件写入