C++ 组合数求法(小范围)
2016-04-12 15:09
369 查看
小范围求法可以求出小范围内的组合数(60以内),大范围要用高精度求,这里用公式c[i][j]=c[i-1][j]+c[i-1][j-1]
公式大家都知道,看代码吧
有些题给定字符串让求某些满足要求的字符串的个数,字符串不会很长,这里就用到了这种方法;
有些题目要求答案mod一个数,直接在数组上mod可以更便捷,表示范围也更大,代码如下:
对于某些大范围组合数,公式往往可以约减,暴力求解是变乘边除可以避免溢出
小范围应用题目 【poj 3252】Round Numbers
我的题解http://blog.csdn.net/williamcode/article/details/51023340
大范围公式变形题目 【poj 1942】Paths on a Grid
我的题解
公式大家都知道,看代码吧
有些题给定字符串让求某些满足要求的字符串的个数,字符串不会很长,这里就用到了这种方法;
有些题目要求答案mod一个数,直接在数组上mod可以更便捷,表示范围也更大,代码如下:
#include<iostream> using namespace std; long long c[100][100]; inline void get_it(int n) { c[0][0]=1; for (int i=1;i<=n;i++) for (int j=0;j<=i;j++) if (i==j ||j==0) c[i][j]=1; else c[i][j]=c[i-1][j]+c[i-1][j-1]; } int main() { get_it(60); for (int i=1;i<=60;i++) {for (int j=1;j<=i;j++) cout<<c[i][j]<<" "; cout<<endl;} }
对于某些大范围组合数,公式往往可以约减,暴力求解是变乘边除可以避免溢出
小范围应用题目 【poj 3252】Round Numbers
我的题解http://blog.csdn.net/williamcode/article/details/51023340
大范围公式变形题目 【poj 1942】Paths on a Grid
我的题解
#include<iostream> #include<algorithm> #include<stdio.h> using namespace std; unsigned long long int n,m; int main() { while(cin>>n>>m) { if (n==0&&m==0) return 0; if (n>m) swap(n,m); unsigned long long int s=1,i,j; for (i=m+1,j=1;i<=m+n;i++,j++) s=s*i/j; cout<<s<<endl; } }
相关文章推荐
- C++实验3-分段函数求值
- 【poj 3461】 Oulipo 中文题意&题解&代码(C++)
- C++继承详解之三——菱形继承+虚继承内存对象模型详解vbptr(1)
- 如何正确的通过 C++ Primer 学习 C++?
- C/C++编程规范
- 组合模式(composite)C++实现
- c++上机实验---3
- 与概率相关的算法题C++解法(附证明过程)
- c++ typedefy用法
- 在C++中调用DLL中的函数
- C++第三次实验—友元类
- C++ Builder中导入Excel表格数据
- php C++扩展的开发
- C++访问控制
- 腾讯2016春季校园实习招聘技术岗初试(一面)问题汇总(CC++后台)
- 腾讯2016春季校园实习招聘技术岗初试(一面)问题汇总(CC++后台)
- C++中链表的插入和删除
- C++中经常使用到宏
- C++第3次作业
- c++作业3