Description
嗯,首先是故事预告:小学六年级的进藤光为了赚些零用钱,跑到爷爷家里寻宝,偶然翻出了一个旧棋盘。接触棋盘的一瞬间,附身于棋盘中的平安时代棋士——藤原佐为的灵魂进入了小光的体内。佐为将围棋视为生命,在他的熏陶下,小光也逐渐对围棋产生了兴趣……
个人认为围棋中最为枯燥乏味的莫过于整理棋子,比如现在光所要做的工作。先有n个黑色的棋子,m个一样的盒子,问:光有多少种不同的方法,可以将棋子全部放到盒子中去??
Input
每一行有一个m和n(1<m<=n<1000)
Output
每一行输出一个可能的个数(模10007取余)
Sample Input
2 4
1 5
1 5
Sample Output
3
1
1
Hint
Source
SnowWind
#include <stdio.h>
#include <stdlib.h>
#define div 10007
int ans[1010][1010]={0};
/*======================
可以分为两种情况:
1 全部的盒子里的棋子个数都不为0;
相当于先分配给每个盒子一球后,再分配。ans[i][j-i];
2 至少有一个盒子里的棋子为0;那前面的i-1个盒子分配
j个球。
状态方程 ans[i][j]=ans[i-1][j]+ans[i][j-i]
=========================*/
int main()
{
int i,j;
int m,n;
for(i=1;i<=1000;i++)
{
ans[1][i]=1;
ans[i][0]=1;
for(j=1;j<=1000;j++)
{
if(j<i)
{
ans[i][j]=ans[j][j]%div;
}
else
{
ans[i][j]=(ans[i-1][j]+ans[i][j-i])%div;
}
}
}
while(scanf("%d %d",&m,&n)!=EOF)
{
printf("%d\n",ans[m][n]%div);
}
return 0;
}