HDU 4602 Partition

来源:互联网 发布:mac怎么连蓝牙耳机 编辑:程序博客网 时间:2024/06/10 17:58

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4602


求把数n分解,一共有2^(n-1)种分法,其中k出现的次数%10^9+7

相当于把n个物品分开,其中有一分为k

分为两种情况



前两种是一种。。。

那么第一种情况方案数为 2*(2^(n-k-1))=2^(n-k)

第二种情况方案数为 2^(i-1)*2^(n-k-i-1) 求和 1<=i<=n-k-1 即2^(n-k-2)*(n-k-1)


代码如下:

#include<cstdio>#define MOD 1000000007using namespace std;int T;long long n,k;long long pow2(int x){if (x<0){return 0;}long long sum=1;long long now=2;while (x){if (x&1){sum*=now;sum%=MOD;}now*=now;now%=MOD;x>>=1;}return sum;}int main(){scanf("%d",&T);while (T--){scanf("%I64d%I64d",&n,&k);if (k>n){printf("0\n");}else{printf("%I64d\n",(pow2(n-k)+(n-k-1)*pow2(n-k-2))%MOD);}}} 



0 0
原创粉丝点击