首页 > 代码库 > 组合计数
组合计数
#include<iostream>
#include<vector>
#include<queue>
#include<algorithm>
#include<memory.h>
#include<cmath>
#include<map>
#include<set>
#define INF 0x3f3f3f3f
#define PII pair<int,int>
#define MAX_NODE 1000005;
using namespace std;
int p,q,k,a,b;
long long c[1005][1005];
long long pow_mod(long long a,long long b,long long mod)
{
int res=1;
while(b)
{
if(b&1)
{
res=res*a%mod;
}
a=a*a%mod;
b>>=1;
}
return res;
}
int main()
{
cin>>p>>q>>k>>a>>b;
for(int i=1;i<=k;i++)
c[i][0]=c[i][i]=1;
for(int i=2;i<=k;i++)
{
for(int j=1;j<i;j++)
{
c[i][j]=(c[i-1][j]+c[i-1][j-1])%10007;
}
}
long long part_A=pow_mod(p,a,10007);
long long part_B=pow_mod(q,b,10007);
long long before=part_A*part_B*c[k][a]%10007;
cout<<before<<endl;
return 0;
}
#include<iostream>
#include<stdio.h>
#include<vector>
#include<queue>
#include<algorithm>
#include<memory.h>
#include<cmath>
#include<map>
#include<set>
#define INF 0x3f3f3f3f
#define PII pair<int,int>
#define MOD 1000000007
using namespace std;
int n,p,q,k,a,b;
//这里只需要两维 否则空间超
//long long c[100005][55];
long long dp[2][100005];
long long ladu[100005];
long long pow_mod(long long a,long long b,long long mod)
{
int res=1;
while(b)
{
if(b&1)
{
res=res*a%mod;
}
a=a*a%mod;
b>>=1;
}
return res;
}
int main()
{
cin>>n>>k;
for(int i=1; i<=n; i++)
cin>>ladu[i];
sort(ladu+1,ladu+n+1);
long long ans=0;
if(k==1)
{
for(int i=1;i<=n;i++)
{
ans=(ans+ladu[i])%MOD;
}
cout<<ans<<endl;
return 0;
}
memset(dp,0,sizeof(dp));
dp[1][0]=dp[1][1]=dp[0][0]=dp[0][1]=1;
bool flag=0;
for(int i=2; i<=n; i++)
{
for(int j=1; j<=k-1; j++)
{
dp[flag][j]=(dp[!flag][j]+dp[!flag][j-1])%MOD;
}
if(i>=k)
ans=(ans+ladu[i]*dp[!flag][k-1]%MOD)%MOD;
flag=!flag;
}
cout<<ans<<endl;
return 0;
}
组合计数
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。