还是动态规划。XDOJ Problem 1144

来源:互联网 发布:怎样在matlab2014编程 编辑:程序博客网 时间:2024/06/05 17:46
Description
嗯,首先是故事预告:小学六年级的进藤光为了赚些零用钱,跑到爷爷家里寻宝,偶然翻出了一个旧棋盘。接触棋盘的一瞬间,附身于棋盘中的平安时代棋士——藤原佐为的灵魂进入了小光的体内。佐为将围棋视为生命,在他的熏陶下,小光也逐渐对围棋产生了兴趣……
个人认为围棋中最为枯燥乏味的莫过于整理棋子,比如现在光所要做的工作。先有n个黑色的棋子,m个一样的盒子,问:光有多少种不同的方法,可以将棋子全部放到盒子中去??
 

 

 
Input
每一行有一个m和n(1<m<=n<1000)
Output
每一行输出一个可能的个数(模10007取余)
Sample Input
2 4
1 5
Sample Output
3
1
Hint
Source
SnowWind
   
#include <stdio.h>#include <stdlib.h>#define div 10007int 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;}

原创粉丝点击