1-求组合数(c(n, m))的几种方法
1.求C(n, m)
动态规划(递归+记忆数组)
递推关系为:C(n, m) = C(n-1, m) + C(n - 1, m - 1),C(n, m)表示为从n个数中选出m个出来,可以基于最后一个元素考虑分解为两种情况:1:选择最后个元素则后面情况为从n-1中再选出m-1个即可:C(n - 1, m - 1), 2:不选择最后一个元素则情况为从剩余的n-1个中选择m个元素:C(n - 1, m ).。所以总情况就是两者的和。 所以:C(n, m) = C(n-1, m) + C(n - 1, m - 1) ==》其实这就是组合数学上的性质:C(n, m) + C(n, m - 1) = C(n + 1, m)
long long f(long long n, long long m){
if(a[n][m]){
return a[n][m];
}
if(m == 1){
return a[n][m] = n;
}
if(m == 0){
return a[n][m] = 1;
}
if(n < m){
return a[n][m] = 0;
}
if(n == 1)
return a[n][m] = 1;
return a[n][m] = f(n - 1, m) + f(n - 1, m - 1);
}
菲波那切数列思想:
| n\m | 00 | 01 | 02 | 03 | 04 | 05 |
| 1 | 1 | 1 | ||||
| 2 | 1 | 2 | 1 | |||
| 3 | 1 | 3 | 3 | 1 | ||
| 4 | 1 | 4 | 7 | 4 | 1 | |
| 5 | 1 | 5 | 11 | 11 | 5 | 1 |
例题:
long long f(long long n, long long m){
a[0]=1;
for(int i=1;i<=n;i++){
a[i]=1;
for(int j=i-1;j>0;j--){
a[j]=a[j]+a[j-1];
}
}
return a[m];
}
链接:https://www.nowcoder.com/acm/contest/67/H
来源:牛客网
题目描述
现在有一个大小n*1的收纳盒,我们手里有无数个大小为1*1和2*1的小方块,我们需要用这些方块填满收纳盒,请问我们有多少种不同的方法填满这个收纳盒
输入描述:
第一行是样例数T
第2到2+T-1行每行有一个整数n(n<=80),描述每个样例中的n。
输出描述:
对于每个样例输出对应的方法数
输入例子:
3
1
2
4
输出例子:
1
2
5
-->
输入
3
1
2
4
输出
1
2
5
#include <iostream>
using namespace std;
int n;
long long a[1000];
long long f(long long n, long long m){
a[0]=1;
for(int i=1;i<=n;i++){
a[i]=1;
for(int j=i-1;j>0;j--){
a[j]=a[j]+a[j-1];
}
}
return a[m];
} long long count = 0;
int main(){
int t;
cin >> t; while(t--){
cin >> n;
count = 0;
for(int i = 0; i <= n / 2; i++){
count += f(n - i, i);
}
cout << count << endl;
} return 0;
}
1-求组合数(c(n, m))的几种方法的更多相关文章
- lucas求组合数C(n,k)%p
Saving Beans http://acm.hdu.edu.cn/showproblem.php?pid=3037 #include<cstdio> typedef __int64 L ...
- URAL 1994 The Emperor's plan 求组合数 大数用log+exp处理
URAL 1994 The Emperor's plan 求组合数 大数用log #include<functional> #include<algorithm> #inclu ...
- N!分解质因子p的个数_快速求组合数C(n,m)
int f(int n,int p) { ) ; return f(n/p,p) + n/p; } https://www.xuebuyuan.com/2867209.html 求组合数C(n,m)( ...
- 求组合数、求逆元、求阶乘 O(n)
在O(n)的时间内求组合数.求逆元.求阶乘.·.· #include <iostream> #include <cstdio> #define ll long long ;// ...
- HDU 5852 Intersection is not allowed!(LGV定理行列式求组合数)题解
题意:有K个棋子在一个大小为N×N的棋盘.一开始,它们都在棋盘的顶端,它们起始的位置是 (1,a1),(1,a2),...,(1,ak) ,它们的目的地是 (n,b1),(n,b2),...,(n,b ...
- hdu 2519 求组合数
求组合数 如果求C5 3 就是5*4*3/3*2*1 也就是(5/3)*(4/2)*(3/1) Sample Input5 //T3 2 //C3 25 34 43 68 0 Sample Outpu ...
- 求组合数 C++程序
一 递归求组合数 设函数为void comb(int m,int k)为找出从自然数1.2.... .m中任取k个数的所有组合. 分析:当组合的第一个数字选定时,其后的数字是从余下的m-1个数中 ...
- HDU 5698——瞬间移动——————【逆元求组合数】
瞬间移动 Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Submis ...
- Codeforces Round #361 (Div. 2) E. Mike and Geometry Problem 【逆元求组合数 && 离散化】
任意门:http://codeforces.com/contest/689/problem/E E. Mike and Geometry Problem time limit per test 3 s ...
- 51nod1119(除法取模/费马小定理求组合数)
题目链接:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1119 题意:中文题诶- 思路:这题数据比较大直接暴力肯定是不 ...
随机推荐
- tensorflow中summary操作
tf中 tensorboard 工具通过读取在网络训练过程中保存到本地的日志文件实现数据可视化,日志数据保存主要用到 tf.summary 中的方法. tf.summary中summary是tf中的一 ...
- TCP/IP分析
TCP/IP四层模型 TCP/IP参考模型 ISO制定的OSI参考模型的过于庞大.复杂招致了许多批评.与此对照,由技术人员自己开发的TCP/IP协议栈获得了更为广泛的应用.如图2-1所示,是TCP/I ...
- 报表生成poi----java操作java对象生成execl表单
1.Apache POI简介 Apache POI是Apache软件基金会的开放源码函式库,POI提供API给Java程式对Microsoft Office格式档案读和写的功能. .NET的开发人员则 ...
- Html页面Dom对象之Event
HTML DOM Event 对象 实例 哪个鼠标按钮被点击? 光标的坐标是? 被按的按键的 unicode 是? 相对于屏幕,光标的坐标是? shift 键被按了吗? 哪个元素被点击了? 哪个事件类 ...
- 获取bing带swim的网址列表
需求背景: 应老婆要求,搜集带有swim关键字的网站.实现过程: 使用requests模块通过bing接口搜索swim关键,将返回内容按需求进行处理,得到网站列表. 注:代码比较拙,老司机就不要弄废时 ...
- CenOS中的yum配置文件CentOS-Base.repo里面的参数都是何含义? souhu CentOS-Base.repo
souhu yum服务器CentOS-Base.repo 将$releasever替换为操作系统版本号 # CentOS-Base.repo # # The mirror system uses t ...
- 在vc++上简单搭建环境(包括文件引用)
1,triplet_head.h 文件 #define TRUE 1 #define FALSE 0 #define OK 1 #define ERROR 0 #define OVER_FLOW -2 ...
- WebService返回json格式数据供苹果或者安卓程序调用
1.新建一个WebService. 2. /// <summary> /// DemoToJson 的摘要说明 /// </summary> [WebService(Names ...
- 八、jdk工具之JvisualVM、JvisualVM之二--Java程序性能分析工具Java VisualVM
目录 一.jdk工具之jps(JVM Process Status Tools)命令使用 二.jdk命令之javah命令(C Header and Stub File Generator) 三.jdk ...
- 用Tensorflow搭建网络
层 创建层 创建密集连接层,并应用激活函数 x = tf.placeholder(tf.float32, shape=[None, 3]) linear_model = tf.layers.Dense ...