【算法】动态规划之计算二项式系数(C++源码)
一、任务描述
请设计并编程实现一个时间复杂度为O(n2)的算法来计算二项式系数Cnk(k <= n)。其中二项式系数Cnk的求值过程如下:
• Ci0=1 • Cii=1 • Cij= Ci-1j-1 + Ci-1j , 当i>=j时
二、步骤描述
构造二维数组来代替矩阵,通过累加迭代的方式进行求解,输出最终的结果,再输入过程中判断n是否大于k,若是则继续,若否则终止程序输出错误。
三、运行结果截图
四、源代码(C++)
#include <iostream>
using namespace std;
#define MAX 100
int binomial(int n, int k)
{
int C[MAX][MAX];
for(int i=0;i<=n;i++)
{
C[i][0]=1;
C[i][i]=1;
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<i;j++)
{
C[i][j]=C[i-1][j-1]+C[i-1][j];
}
}
return C[n][k];
}
int main()
{
int n,k,Result;
cout<<"Please enter a value for n : ";
cin>>n;
cout<<"Please enter a value for k : ";
cin>>k;
if(n<k)
{
cout<<"Please enter the correct values for n and k (n>k) ! "<<endl;
}
else
{
Result=binomial(n,k);
cout<<"The result is : "<<Result<<endl;
}
return 0;
}