CodeForces 660 E.Different Subsets For All Tuples(组合数学)

来源:互联网 发布:网络连接电视怎么连接 编辑:程序博客网 时间:2024/06/17 14:19

Description
定义f(a)为序列a的不同的子序列个数,a是一个长度为n的序列,每个数介于1~m,求所有这种a的f(a)之和
Input
两个整数n,m(1<=n,m<=1e6)
Output
求f(a)之和,a是一个长度为n,每个数介于1~m的序列,结果模1e9+7
Sample Input
1 3
Sample Output
6
Solution
这里写图片描述
Code

#include<cstdio>#include<iostream>#include<cstring>#include<algorithm>#include<cmath>#include<vector>#include<queue>#include<map>#include<set>#include<ctime>using namespace std;typedef long long ll;#define INF 0x3f3f3f3f#define maxn 1111111#define mod 1000000007llll f[maxn],g[maxn];void init(int n,int m){    f[0]=g[0]=1;    for(int i=1;i<=n;i++)        f[i]=1ll*m*f[i-1]%mod,g[i]=1ll*(2*m-1)*g[i-1]%mod; }int main(){    int n,m;    while(~scanf("%d%d",&n,&m))    {        init(n,m);        ll ans=0;        for(int i=1;i<=n;i++)            ans=(ans+f[n-i+1]*g[i-1]%mod)%mod;        ans=(ans+f[n])%mod;        printf("%I64d\n",ans);    }    return 0;}
阅读全文
0 0
原创粉丝点击