这个题我们首先可以dp,f[i][j]表示前i个科目恰好碾压了j个人的方案数,然后进行转移。我们先不考虑每个人的分数,先只关心和B的相对大小关系。我们设R[i]为第i科比B分数少的人数,则有f[i][j]=sum f[i-1][k]*C(k,j)*C(n-1-k,R[i]-j)  (k>=j) 怎么解释呢,首先前i-1科有k个人已经被碾压,k肯定大于等于j,然后考虑当前这一科有j个人被碾压,那么就需要从k个人中选出j个来即C(k,j),然后从剩下的有R[i]-j个人比B考的少,这些人必须是之前i-1科里就没有被碾压的人,所以再乘上一个C(n-1-j,R[i]-k),到此我们dp完了,可是我们还需要算上每个人的分数,这个东西很明显可以乘上我们的f[m][k]得到答案。 这些分数的方案数是什么呢?对于第i科成绩,有n-R[i]-1个人比B考的多,有R[i]个人比B少,因为我们之前考虑了相对大小关系,这里直接很明显的算就行了就是

然后我们算n次sigam即可,把他们乘在一起。但是由于Ui是1e9级别的,直接暴力算肯定会超时,我们可以用拉格朗日插值来算。

很明显这是一个n次的多项式,所以我们利用插值就可以算出答案了。 —— by VANE

#include<iostream>
#include<cstdio>
#include<cstring>
#define MN 105
#define mod 1000000007
using namespace std;
inline int read()
{
int x = , f = ; char ch = getchar();
while(ch < '' || ch > ''){ if(ch == '-') f = -; ch = getchar();}
while(ch >= '' && ch <= ''){x = x * + ch - '';ch = getchar();}
return x * f;
}
int inv[MN+],Inv[MN+],p[MN+],U[MN+],R[MN+],n,m,K,f[MN+][MN+]; inline int pow(int x,int k)
{
int sum=;
for(;k;k>>=,x=1LL*x*x%mod)
if(k&) sum=1LL*sum*x%mod;
return sum;
}
inline int C(int n,int m){return 1LL*p[n]*Inv[m]%mod*Inv[n-m]%mod;}
inline void Re(int&x,int y){x+=y;x>=mod?x-=mod:;} inline int Calc(int m,int rk)
{
if(m<=n+)
{
int res=;
for(int i=;i<=m;++i)
res=(res+1LL*pow(i,rk)*pow(m-i,n-rk-))%mod;
return res;
}
int sum=,res=,Div=,S=;
for(int i=;i<=n+;++i) sum=1LL*sum*(m-i+mod)%mod;
for(int i=;i<=n+;++i) Div=1LL*Div*(-i+mod)%mod;
for(int i=;i<=n+;++i)
{
int t=1LL*sum*pow(m-i+mod,mod-)%mod;
S=(S+1LL*pow(i,rk)%mod*pow(m-i,n-rk-))%mod;
t=1LL*t*S%mod;
res=(res+1LL*t*pow(Div,mod-))%mod;
Div=1LL*Div*pow(mod-(n-i+),mod-)%mod*i%mod;
}
return res;
} int main()
{
n=read();m=read();K=read();
for(int i=;i<=m;++i) U[i]=read();
for(int i=;i<=m;++i) R[i]=n-read();
inv[]=inv[]=p[]=p[]=Inv[]=;
for(int i=;i<=MN;++i)
p[i]=1LL*p[i-]*i%mod,
inv[i]=1LL*(mod-mod/i)*inv[mod%i]%mod;
for(int i=;i<=MN;++i)
Inv[i]=1LL*Inv[i-]*inv[i]%mod;
f[][n-]=;
R[]=n-;
for(int i=;i<=m;++i)
for(int j=;j<=R[i];++j)
for(int k=j;k<=R[i-];++k)
if(n--k>=R[i]-j)
Re(f[i][j],1ll*f[i-][k]*C(k,j)%mod*C(n--k,R[i]-j)%mod);
int ans=f[m][K];
for(int i=;i<=m;++i) ans=1LL*ans*Calc(U[i],R[i])%mod;
cout<<ans<<endl;
return ;
}

BZOJ4599[JLoi2016&LNoi2016]成绩比较(dp+拉格朗日插值)的更多相关文章

  1. bzoj 4559 [JLoi2016]成绩比较 —— DP+拉格朗日插值

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4559 看了看拉格朗日插值:http://www.cnblogs.com/ECJTUACM-8 ...

  2. BZOJ4559: [JLoi2016]成绩比较(dp 拉格朗日插值)

    题意 题目链接 Sol 想不到想不到.. 首先在不考虑每个人的真是成绩的情况下,设\(f[i][j]\)表示考虑了前\(i\)个人,有\(j\)个人被碾压的方案数 转移方程:\[f[i][j] = \ ...

  3. P3270 [JLOI2016]成绩比较(拉格朗日插值)

    传送门 挺神仙的啊-- 设\(f[i][j]\)为考虑前\(i\)门课程,有\(j\)个人被\(B\)爷碾压的方案数,那么转移为\[f[i][j]=\sum_{k=j}^{n-1}f[i-1][k]\ ...

  4. 【bzoj4559】[JLoi2016]成绩比较(dp+拉格朗日插值)

    bzoj 题意: 有\(n\)位同学,\(m\)门课. 一位同学在第\(i\)门课上面获得的分数上限为\(u_i\). 定义同学\(A\)碾压同学\(B\)为每一课\(A\)同学的成绩都不低于\(B\ ...

  5. bzoj千题计划270:bzoj4559: [JLoi2016]成绩比较(拉格朗日插值)

    http://www.lydsy.com/JudgeOnline/problem.php?id=4559 f[i][j] 表示前i门课,有j个人没有被碾压的方案数 g[i] 表示第i门课,满足B神排名 ...

  6. F. Cowmpany Cowmpensation dp+拉格朗日插值

    题意:一个数,每个节点取值是1-d,父亲比儿子节点值要大,求方案数 题解:\(dp[u][x]=\prod_{v}\sum_{i=1}^xdp[v][i]\),v是u的子节点,先预处理出前3000项, ...

  7. 洛谷 P5469 - [NOI2019] 机器人(区间 dp+拉格朗日插值)

    洛谷题面传送门 神仙题,放在 D1T2 可能略难了一点( 首先显然对于 P 型机器人而言,将它放在 \(i\) 之后它会走到左边第一个严格 \(>a_i\) 的位置,对于 Q 型机器人而言,将它 ...

  8. BZOJ2655: calc(dp 拉格朗日插值)

    题意 题目链接 Sol 首先不难想到一个dp 设\(f[i][j]\)表示选了\(i\)个严格递增的数最大的数为\(j\)的方案数 转移的时候判断一下最后一个位置是否是\(j\) \[f[i][j] ...

  9. [CF995F]Cowmpany Cowmpensation[树形dp+拉格朗日插值]

    题意 给你一棵树,你要用不超过 \(D\) 的权值给每个节点赋值,保证一个点的权值不小于其子节点,问有多少种合法的方案. \(n\leq 3000, D\leq 10^9\) 分析 如果 \(D\) ...

随机推荐

  1. 【洛谷 P3191】 [HNOI2007]紧急疏散EVACUATE(二分答案,最大流)

    题目链接 sb错误调了3hour+.. bfs预处理出每个\(.\)到每个\(D\)的最短距离. 二分时间\(t\),把每个\(D\)拆成\(t\)个点,这\(t\)个点两两连边,流量\(INF\)表 ...

  2. [转载]PM管理技巧

      产品经理的沟通策略 2016年10月11日/分类: 文章 /编辑: Amy 产品经理处于沟通枢纽的位置,工作中需要跟各种岗位的人打交道,比如:领导.开发.运营.客户.用户.合作伙伴… 沟通能力是产 ...

  3. 自定义 feign 反序列化时间字符格式

    参考 : https://blog.csdn.net/forezp/article/details/73480304 feign client 默认配置类:默认的配置类为FeignClientsCon ...

  4. Three.js基础探寻五——正二十面体、圆环面等

    除了立方体.平面.球体,Three.js还提供了很多其他几何形状. 1.圆形 CircleGeometry可以创建圆形或者扇形: THREE.CircleGeometry(radius, segmen ...

  5. imperva配置文件的导入导出

    imperva配置文件的导入导出 Full_expimp.sh       //进行备份 1导入 2导出 输入密码后 1 全部导出 是否想导出失败的数据 默认密码是system的密码 输入导出的路径 ...

  6. 38 - 网络编程-socketserver

    目录 1 socket编程弊端 2 SocketServer模块 2.1 服务器类 2.2 Mixin类 2.3 RequestHandlerClass是啥 2.4 编程接口 3 实现EchoServ ...

  7. go 数据变量和操作符

    数据类型 布尔类型 a. var b bool 和 var b bool = true 和 var b = falseb. 操作符 == 和 !=c. 取反操作符: !bd. && 和 ...

  8. elk系列6之tcp模块的使用【转】

    preface tcp模块的使用场景如下: 有一台服务器A只需要收集一个日志,那么我们就可以不需要在这服务器上安装logstash,我们通过在其他logstash上启用tcp模块,监听某个端口,然后我 ...

  9. 大数据系列之分布式数据库HBase-0.9.8安装及增删改查实践

    若查看HBase-1.2.4版本内容及demo代码详见 大数据系列之分布式数据库HBase-1.2.4+Zookeeper 安装及增删改查实践 1. 环境准备: 1.需要在Hadoop启动正常情况下安 ...

  10. spring-mybatis.xml配置

    1.自动扫描 <context:component-scan base-package="com.javen" /> 2.引入配置文件 <bean id=&quo ...