UVA11609Teams

来源:互联网 发布:淘宝有发票是正品么 编辑:程序博客网 时间:2024/05/18 01:35

题意:从N个人里面选出一个或者多个组成队伍,并选出一个作为队长,求所有的分组的可能数。
思路:瞎做。用组合数学加推导推导。

Ans=sum(C(n,k)*k,1<=k<=n)

然后将K乘进去,并且把最前面的N提出来,就变成了
Ans=sum(n*C(n-1,k-1),1<=k<=n)
Ans=n*2^(n-1)
代码:

#include <iostream>#include <cstring>#include <cstdio>#include <vector>#include <map>using namespace std;typedef long long LL;int  n;const int MOD=1000000007;LL qp(LL a,LL n){    LL ans=1;    a%=MOD;    while(n)    {        if(n&1)            ans=ans*a%MOD;        n>>=1;        a=a*a%MOD;    }    return ans;}int main(){  //  cout << lucas(1,1);    cin >> n;    for(int i=0;i<n;i++)    {        int tp;        cin >> tp;        cout << "Case #"<<i+1<<": ";        cout << tp*qp(2,tp-1)%MOD<<endl;    }    return 0;}
0 0
原创粉丝点击