Power oj2498/DP/递推

power oj 2498 /递推

2498: 新年礼物

Time Limit: 1000 MS Memory Limit: 65536 KB
Total Submit: 12 Accepted: 3 Page View: 61
Submit Status Discuss

新年快到了,上决╇ф想为小伙伴准备一些新年礼物,他手上有N个独一无二的礼物(礼物之间互不相同)和K个完全相同的礼品盒,他希望将所有的礼物全部送出去且保证每个盒子里都至少有一个礼物,因为谁都不想收到空的礼品盒,现在上决╇ф想知道一共有多少种方案来放置礼物?

多组输入,每组输入一行,分别为N和K,(0<=N<=25,0<=K<=25)。 当N=0并且K=0时输入结束,这组不需要输出。
每组输出一行,为方案数 MOD 1000000007。
4 2 5 3 3 1 0 0
7 25 1
 
题意很好理解:
dp[i][j]表示将i个礼物放到j个盒子里。1、保证i>=j;2、dp[i][j]=(dp[i-1][j-1]+(j*dp[i-1][j])%mod)%mod;//必须保证每个盒子都装了。
#include<bits/stdc++.h>
typedef  long long LL;
const LL mod=1000000007;
LL dp[30][30];
int n,k;
void fuck()
{
    dp[0][0]=1;
    for(LL i=1;i<=25;i++)
        for(LL j=1;j<=i;j++)
            dp[i][j]=(dp[i-1][j-1]+(j*dp[i-1][j])%mod)%mod;
 
}
int main ()
{
    fuck();
    while(~scanf("%d%d",&n,&k))
    {
        if(n==0&&k==0)
            break;
        printf("%lld
",dp[n][k]);
    }
    return 0;
}
想的太多,做的太少。
原文地址:https://www.cnblogs.com/pealicx/p/6189197.html