XidianOJ 1183 Water Problem: Items divided

Posted TOTOTOTOTZZZZZ

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了XidianOJ 1183 Water Problem: Items divided相关的知识,希望对你有一定的参考价值。

题目描述

 

 

Youyouyouyou is very interested in math, one day, an idea came into his mind that how many ways he can patition n same things into no more than m groups? he think it too hard for him, so youyouyouyou ask wise cyt for help, but wise cyt don’t want to talk with youyouyouyou because it is too easy for him, now can you help youyouyouyou solve this problem?

 

输入

 

 

multi test cases, two integers n and m(1<=m<=n<=1000) , end with n = m = 0.

 

输出

 

output

#include <cstdio>
#include <algorithm>
#include <iostream>
using namespace std;
#define MOD 1000000007
typedef long long LL;
LL f[1001][1001] = {0},ans[1001][1001] = {0};
int main(){
    int n,m,i,j;
    for (i=1;i<=1000;i++){
        f[i][0] = 0;
        f[i][1] = 1;
        f[i][i] = 1;
        f[0][i] = 0;
    }
    for (i=1;i<=1000;i++){
        for (j=1;j<=i;j++){
            if (i == j) f[i][j] = 1;
            else 
                f[i][j] = (f[i-1][j-1] + f[i-j][j]) % MOD;
        }
    }
    for (i=1;i<=1000;i++){
        ans[i][1] = f[i][1];
        for (j=2;j<=i;j++){
            ans[i][j] = (ans[i][j-1] + f[i][j]) % MOD;
        }
    }
    while (scanf("%d %d",&n,&m) != EOF){
        if (n == 0 && m == 0) break;
//        LL res = 0;
//        for (i=1;i<=m;i++){
//            res = (res + f[n][i]) % MOD;
//        }
//        printf("%lld\n",res);
        printf("%lld\n",ans[n][m]);
    }
    return 0;
} 

 

an answer modulo 1e9 + 7 per line

--正文

n个相同的球放入m个相同的盒子,允许有空盒

  F(n,m) = F(n-1,m-1) + F(n-m,m)

注意边界的处理

 

以上是关于XidianOJ 1183 Water Problem: Items divided的主要内容,如果未能解决你的问题,请参考以下文章

XidianOJ 1176 ship

XidianOJ 1140 寻找万神

XidianOJ 1000 a+b

XidianOJ 1073 Nunchakus

XidianOJ 1120 Gold of Orz Pandas

XidianOJ 1142 删除字符