继续动态规划。

来源:互联网 发布:武汉java达内传智播客 编辑:程序博客网 时间:2024/05/19 12:29

又一个动态规划了,智商不够用。

Description

 这个日常一点也不日常,这就是这个动漫的真实写照。比如,这就是一件“日常”中所发生的微妙的小事。

人造人名乃的梦想就是被作为正常人来看待,然而不幸的是,她的背后有一个很大的发条(一个没有实际作用的发条)。于是,体育课上做不了俯卧式跳高,踢足球时因为这个而造成越位犯规,无法左右靠背的椅子,睡觉时也无法仰睡……总之,不幸啊。
有一天名乃发现了这个发条的秘密。现有m种钥匙,每一种都有无限多把,有n把锁,每把锁只有一种钥匙可以打开。且已知,要打开所有的锁,每种钥匙至少使用一次。如果同时打开了所有的锁,名乃就有机会摘下背后的发条。问名乃有多少种尝试可能?
Input
每一行有一个m和n(1<m<=n<1000)
Output
每一行输出一个可能的个数(模10007取余)
Sample Input
1 2
2 4
Sample Output
1
14
#include <stdio.h>#include <stdlib.h>#define div 10007/*==============假设其中一把锁用一个钥匙打开,那么剩下的要用m-1把钥匙(m把必用完)f[n][m]=m*(f[n-1][m]+f[n-1][m-1])===============*/int ans[1010][1010]={0};int main(){    int i ,j;    int m,n;    ans[0][0]=1;    for(i=1;i<=1000;i++)    {        ans[i][1]=1;        for(j=1;j<=1000;j++)        {            ans[i][j]=j*(ans[i-1][j-1]+ans[i-1][j])%div;        }    }    while(scanf("%d %d",&m,&n)!=EOF)    {        printf("%d\n",ans[n][m]%div);    }    return 0;}