递推 数学
来源:互联网 发布:java速成教程 编辑:程序博客网 时间:2024/04/26 15:06
组合数问题
组合数
其中
小葱想知道如果给定
输入格式
从标准输入读入数据。
第一行有两个整数
接下来
输出格式
输出到标准输出。
样例一
input
1 23 3
output
1
explanation
在所有可能的情况中,只有
样例二
input
2 54 56 7
output
07
通过组合数的定义,可以发现组合数就是杨辉三角,
其中:
c[i][j] = c[i-1][j-1] + c[i-1][j]
从 i 个物品中取 j 个的方案数可以从已经计算过的 i - 1 来推出。
有一点特别需要注意,我们不可能这样推到 2000 去,而最终题目要求的也是在去模意义下的个数,所以我们采用边加边取模的方式,控制c[i][j]的范围。
通过: (a%p + b%p) % p = (a + b) % p 不断递推
然后求前缀和,每行相加就可以了。
Code
#include<iostream>#include<cstring>using namespace std;int t,k,n,m;int c[2005][2005];int s[2005][2005];int main(){memset(c,0,sizeof(c));memset(s,0,sizeof(0));cin >> t >> k;for(int i=0;i<2005;i++){c[i][0] = 1;c[i][i] = 1;}for(int i=2;i<2005;i++){for (int j=1;j<i;j++){c[i][j] = (c[i-1][j-1] + c[i-1][j]) % k;}}for(int i=0;i<2005;i++){if (c[i][0] == 0) s[i][0] = 1;for(int j=1;j<=i;j++){if (c[i][j] == 0) s[i][j] = s[i][j-1] + 1;else s[i][j] = s[i][j-1];}}for (int i=0;i<t;i++){cin >> n >> m;int ans = 0;for (int j=0;j<=n;j++){ans += s[j][min(j,m)];}cout << ans << endl;}return 0;}
0 0
- HRBUST1589(数学递推)
- Hduoj2501【数学递推】
- hdu5492(递推+数学)
- 递推 数学
- A1 = ?+数学递推
- hdu1292 组合数学+递推
- bzoj3997 组合数学 递推
- POJ1019 数学+递推乱搞
- HDU6143 组合数学 递推
- SOJ-2857(数学递推公式)
- 【数学 递推】 HDU 1143 Tri Tiling
- hdu1143 Tri Tiling(数学:递推)
- UVA 10609 数学 几何 递推
- HLJUOJ1128 && HDU2046(数学递推)
- UVa 11401 Triangle Counting(数学递推)
- 汉诺塔III 2064 (递推+数学)
- 汉诺塔IV (递推+数学)
- 汉诺塔II (递推+数学)
- 最短路径之Dijkstra算法
- 今天2017/4/22开始记录
- ubuntu下Couldn't import dot_parser, loading of dot files will not be possible的问题
- MapperScannerConfigurer底层简单原理
- MATLAB实现基于仿射变换的图像变换的代码
- 递推 数学
- Manacher 算法 求最长字回文串
- bzoj4832: 抵制克苏恩
- 利用服务器架设SSR云免流
- 最短路径之Bellman-Ford算法----解决负权边
- String资源占位符
- 1008. 数组元素循环右移问题
- ubuntu16.04 下安装 Nginx 的方法
- wdcp的安装