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 }
浙公网安备 33010602011771号