描述
松哥有次突发奇想,决定回高中再上高中数学课,数学老师提了这样一个问题:有一个分段函数T(0,n)=n(n>0),T(k,n)=T(k-1,1)+T(k-1,2)+…+T(k-1,n)(k>0,n>0).第一天数学老师问他,松松对于T(1,1)你怎么看?第二天数学老师问他,松松对于T(2,2)你怎么看?第三天数学老师问他,松松对于T(3,3)你怎么看?……松哥怒了,松哥决定一次把所有函数值全部算出来,但是由于他智商有限,所以他想请求你的帮助.
输入
多组测试数据.
每组测试数据包含一个正整数k,n.(0<k,n<1010)
输出
对于每组测试数据,输出T(k,n)mod 100007.
题目应该还是比较好理解的,套用题目给出的公式进行一步步求解。终止条件就是要将给出的T(k,n)都化成最简的T(0,n)类型。通过推导可以发现,其实所有T(k,n)都可以用数值对f[i][j]=(f[i-1][j]+f[i][j-1])表示。
代码实现:
#include <iostream>
using namespace std;
int f[1020][1020]; //作为全局变量,在静态存储区分配内存,如果是局部变量,在栈内分配内存,如果数组较大容易造成栈溢出。
int main()
{
int i,j,k,n;
for(j=0;j<=1010;j++)
{
f[0][j]=j;
f[j][1]=1;
}
for(i=1;i<=1010;i++)
for(j=2;j<=1010;j++)
{
f[i][j]=(f[i-1][j]+f[i][j-1])%100007; //经过推导出来的数学公式
}
while(cin>>k>>n)
{
cout<<f[k][n]<<endl;
}
return 0;
}
希望我的文章对你有所帮助,嘻嘻!
如果有错误的话还请批评指正。