[ZCMU OJ]1138: 松哥的困惑IV(简单dp)

Description

松哥有次突发奇想,决定回高中再上高中数学课,数学老师提了这样一个问题:

有一个分段函数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)你怎么看?……松哥怒了,松哥决定一次把所有函数值全部算出来,但是由于他智商有限,所以他想请求你的帮助.

Input

多组测试数据.

每组测试数据包含一个正整数k,n.(0<k,n<1010)

Output

对于每组测试数据,输出T(k,n)mod 100007.

Sample Input

0 2
1 3
2 5

Sample Output

2
6
35
———————————————————————————————————————————
看到公式,我们首先想的二维数组。建立一个二维数组t[1020][1020],由 T(0,n)=n(n>0) 可知,将该二维数组看作矩阵的话,第0行的数全部为所在列的列数;
借此信息再推导,
         t[1][1]=t[0][1]=1;
         t[2][1]=t[1][1]=1;
         t[3][1]=t[2][1]=1;
         .........
                        即 t[k,1]=1;
为了理解 T(k,n)=T(k-1,1)+T(k-1,2)+…+T(k-1,n) 这个信息,我们可以直接利用题目中sample以及已有的信息进行简单推导。
例如“1 3”。
          t[1][3]=t[0][1]+t[0][2]+t[0][3]
                   =t[1][2]+t[0][3]
                         即 t[k][n]=t[k-1][n]+t[k][n-1];
#include<bits/stdc++.h>
using namespace std;
int t[1020][1020]={0};
int main()
{
	int k,n;
	int x,y;
	for(k=0;k<1020;k++)
	{
		for(n=1;n<1020;n++)
		{
			if(k==0)
			t[k][n]=n;
			else if(n==1)
			t[k][n]=1;
			else
			t[k][n]=(t[k-1][n]+t[k][n-1])%100007;//注意取模	
		}
	}
	while(~scanf("%d %d",&x,&y))//注意cout、cin会超时 
	{
		printf("%d\n",t[x][y]);
	}
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值