问题:
定义超级和函数F如下:
F(0, n) = n,对于所有的正整数n..
F(k, n) = F(k – 1, 1) + F(k – 1, 2) + … + F(k – 1, n),对于所有的正整数k和n.
请实现下面Solution类中计算F(k, n)的函数(1 <= k, n <= 14).
例1:F(1, 3) = 6
例2:F(2, 3) = 10
例3:F(10, 10) = 167960
分析:可以用递归和动态规划解决
此处用动态规划,公式可以分解为F(k,n)=F(k-1,n)+F(k,n-1),临界条件为F(0,i)=i,F(i,0)=0;
代码:
class Solution {
public:
int F(int k, int n) {
if(k < 1||n >14)
return 0;
int a[20][20];
for(int i = 0; i < 20;i++){
a[i][0]=0;
a[0][i]=i;
}
for(int i = 1;i <= k;i++)
for(int j = 1;j <= n;j++){
a[i][j] = a[i-1][j]+a[i][j-1];
}
return a[k][n];
}
};