Light OJ 1102 Problem Makes Problem 组合数

来源:互联网 发布:windows的发展过程 编辑:程序博客网 时间:2024/06/11 22:21

题目来源:Light OJ 1102 Problem Makes Problem

题意:一个整数n分解成k个数相加有多少种方案 数字可以重复 

思路:m个苹果放n个盒子有多少方案 允许盒子有空 盒子空对应0 答案是C(n+m-1, n-1) 

首先如果不允许有空 答案是C(m-1, n-1) 插空法m个苹果有m-1个空档 在这m-1个空档里选n-1个分成了n部分 每部分都不是空的

现在允许为空 那么给每个盒子增加一个苹果 相当于n+m个苹果分成n份 n+m-1个空档里选n-1个  C(n+m-1, n-1) 

每部分都至少为1 为1的其实是空的 是我开始加上去的 为的是方便用插空法 


#include <cstdio>#include <cstring>using namespace std;typedef long long LL;const LL mod = 1000000007;const int maxn = 2000010;//返回a^p mod n 快速幂LL a[maxn];LL pow_mod(LL a, LL p, LL n){LL ans = 1;while(p){if(p&1){ans *= a;ans %= n;}a *= a;a %= n;p >>= 1;}return ans;}LL C(LL n, LL m){LL x = a[n], y = a[n-m]*a[m]%mod;return x*pow_mod(y, mod-2, mod)%mod;}int main(){a[0] = 1;for(int i = 1; i <= 2000000; i++){a[i] = a[i-1]*i;a[i] %= mod;}int cas = 0; int T;scanf("%d", &T); while(T--){LL n, m;scanf("%lld %lld", &n, &m);printf("Case %d: %lld\n", ++cas, C(n+m-1, m-1));}return 0;}


0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 5岁宝宝说话结巴怎么办 两岁宝宝说话晚怎么办 6岁儿童说话结巴怎么办 2岁宝宝呕吐拉稀怎么办 2岁宝宝突然呕吐怎么办 2岁宝宝呕吐发烧怎么办 2岁宝宝呕吐厉害怎么办 1岁宝宝半夜呕吐怎么办 2岁半宝宝呕吐怎么办 2岁宝宝半夜呕吐怎么办 两岁宝宝一直吐怎么办 原画师老了以后怎么办 孩子不想上学怎么办怎么去说服 嫉妒别人比我好怎么办 三岁宝宝爱打人怎么办 1岁宝宝喜欢打人怎么办 ps图层解锁不了怎么办 沈腾结婚马丽怎么办 延长甲没有纸托怎么办 高考第一志愿没录取怎么办 电子画颜料干了怎么办 数字画颜料干了怎么办 彩砂纸画不好了怎么办 宝宝吃了油画棒怎么办 2岁宝宝不爱刷牙怎么办 两岁宝宝不刷牙怎么办 1岁宝宝不爱刷牙怎么办 3岁宝宝不肯刷牙怎么办 20岁没学历迷茫怎么办 四岁了不长头发怎么办 17岁掉头发严重怎么办 头发很油,又少怎么办 25岁头发变稀怎么办 宝宝头发少又黄怎么办 头旋附近头发少怎么办 25岁掉头发严重怎么办 2岁宝宝头发稀少怎么办 掉头发很厉害怎么办吧 头发点的很厉害怎么办 为什么掉头发很厉害怎么办 产后2年脱发严重怎么办