• 博客园logo
  • 会员
  • 周边
  • 新闻
  • 博问
  • 闪存
  • 众包
  • 赞助商
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
HaibaraAi
博客园    首页    新随笔    联系   管理    订阅  订阅

nbutoj 全名热身赛 F

  • [F] 分蛋糕

  •             时间限制: 2000 ms 内存限制: 65535 K        

        

  • 问题描述
  • wcy, wsy, xth, zh, llz 和他们的朋友正在庆祝wcy的生日。他们一起买了一个非常大的生日蛋糕。他们把生日蛋糕分成了完全相同的m个部分,然后把他们放在了盘子(盘子是无差别的)里。Wcy很好奇,他想知道把m块蛋糕放在n个盘子里能有多少种方法。

  • 输入
  •                 输入数据第一行有两个整数n, m(1 ≤ n, m ≤ 4 500),分别表示盘子数和蛋糕块数。和           
  • 输出
  •                 如果方案总数是K,仅输出K mod 1000000007之后的结果,因为可能会k很大。           
  • 样例输入
  • 3 7
  • 样例输出
  • 8
  • 提示
  • 放7块蛋糕到3个盘子里共有8种方式,分别是(0,0,7), (0,1,6), (0,2,5), (0,3,4), (1,1,5), (1,2,4), (1,3,3), (2,2,3).
  • 来源
  • 本站或者转载
  • 操作
  •                                                   
 1 #include <cstdio>
 2 #include <iostream>
 3 #include <vector>
 4 #include <set>
 5 #include <cstring>
 6 #include <string>
 7 #include <map>
 8 #include <cmath>
 9 #include <ctime>
10 #include <algorithm>
11 #include <queue>
12 
13 using namespace std;
14 #define INF 0x7fffffff
15 #define mod 1000000007
16 #define maxm 1001
17 #define mp make_pair
18 #define pb push_back
19 #define rep(i,n) for(int i = 0; i < (n); i++)
20 #define re return
21 #define fi first
22 #define se second
23 #define sz(x) ((int) (x).size())
24 #define all(x) (x).begin(), (x).end()
25 #define sqr(x) ((x) * (x))
26 #define sqrt(x) sqrt(abs(x))
27 #define y0 y3487465
28 //#define y1 y8687969
29 #define fill(x,y) memset(x,y,sizeof(x))
30 
31 typedef vector<int> vi;
32 typedef long long ll;
33 typedef long double ld;
34 typedef double D;
35 typedef pair<int, int> ii;
36 typedef vector<ii> vii;
37 typedef vector<string> vs;
38 typedef vector<vi> vvi;
39 
40 template<class T> T abs(T x) { re x > 0 ? x : -x; }
41 
42 const int maxn = 4505;
43 
44 int n, m, t, s, k, x;
45 //string s;
46 int a[maxn];
47 int dp[maxn][maxn];
48 int main(){
49     int cas = 1;
50     scanf("%d", &t);
51     while (t--){
52         scanf("%d%d", &m, &n);
53         memset(dp, 0, sizeof dp);
54         dp[1][1] = 1;
55         for (int i = 1; i <= m; i++){
56             for (int j = 0; j <= n; j++){
57                 dp[i][j] = (dp[i][j]+dp[i][j - i])%mod;
58                 dp[i][j] = (dp[i][j]+dp[i-1][j-1])%mod;
59             }
60         }
61         int ans = 0;
62         for (int i = 1; i <= m; i++)ans=(ans+dp[i][n])%mod;
63         printf("%d\n", ans);
64     }
65     return 0;
66 }
View Code
posted @ 2013-11-23 02:04  HaibaraAi  阅读(246)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2026
浙公网安备 33010602011771号 浙ICP备2021040463号-3