码迷,mamicode.com
首页 > 其他好文 > 详细

XidianOJ 1183 Water Problem: Items divided

时间:2016-12-10 22:40:26      阅读:310      评论:0      收藏:0      [点我收藏+]

标签:problem   ios   else   item   ati   class   end   case   turn   

题目描述

 

 

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

标签:problem   ios   else   item   ati   class   end   case   turn   

原文地址:http://www.cnblogs.com/ToTOrz/p/6158301.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!