题目传送门

分析:

我们可以先试着求一下,对于单个学科,有多少种分配方案可以使B神排名为R

对于第i个学科

\(~~~~g(i)=\sum_{j=1}^{H_i}j^{n-R_i}(H_i-j)^{R_i-1}\)

相当于枚举B神本人的分数,然后分别将其他人分配

这个\(H_i\)很大,但是这个函数是一个大约在n次的多项式,拉格朗日插值一下就好了

不会?去百度一下,就是套一个公式2333

然后我们考虑DP

设f[i][j]表示前i个技能后目前碾压了j个人

那么

\(~~~~f[i][j]=\sum_{k=j}^{n-1}f[i-1][k]C_k^jC_{n-k-1}^{R_i-1-k+j}g(i)\)

相当于是在前i-1个技能中碾压的k个人里面选择j个,剩下的n-k-1再选R[i]-1-k+j,一共j个人被碾压

然后大力DP

#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<queue>
#include<vector>
#include<set> #define maxn 105
#define MOD 1000000007 using namespace std; inline int getint()
{
int num=0,flag=1;char c;
while((c=getchar())<'0'||c>'9')if(c=='-')flag=-1;
while(c>='0'&&c<='9')num=num*10+c-48,c=getchar();
return num*flag;
} int n,m;
long long H[maxn],R[maxn];
long long f[maxn][maxn],g[maxn];
long long C[maxn][maxn]; inline long long ksm(long long num,long long k)
{
long long ret=1;
for(;k;k>>=1,num=num*num%MOD)if(k&1)ret=ret*num%MOD;
return ret;
} inline long long lagrange(int x)
{
long long ret=0;
long long tmp[maxn];memset(tmp,0,sizeof tmp);
for(int h=0;h<maxn;h++)for(int i=1;i<=h;i++)
(tmp[h]+=ksm(i,n-R[x])*ksm(h-i,R[x]-1))%=MOD;
for(int i=0;i<maxn;i++)
{
long long num=1;
for(int j=0;j<maxn;j++)if(i!=j)num=num*(H[x]-j)%MOD*ksm((i-j+MOD)%MOD,MOD-2)%MOD;
(ret+=tmp[i]*num)%=MOD;
}
return (ret+MOD)%MOD;
} int main()
{
n=getint(),m=getint();int p=getint();
for(int i=1;i<=m;i++)H[i]=getint();
for(int i=1;i<=m;i++)R[i]=getint();
for(int i=1;i<=m;i++)g[i]=lagrange(i);
for(int i=0;i<maxn;i++)
{
C[i][0]=C[i][i]=1;
for(int j=1;j<i;j++)C[i][j]=(C[i-1][j-1]+C[i-1][j])%MOD;
}
f[0][n-1]=1;
for(int i=1;i<=m;i++)for(int j=0;j<n;j++)for(int k=j;k<n;k++)
if(R[i]-1-k+j>=0&&n-1-k>=R[i]-1-k+j)
(f[i][j]+=f[i-1][k]*C[k][j]%MOD*C[n-k-1][R[i]-1-(k-j)]%MOD*g[i])%=MOD;
printf("%lld\n",f[m][p]);
}

BZOJ4559 成绩比较的更多相关文章

  1. 【BZOJ4559】成绩比较(动态规划,拉格朗日插值)

    [BZOJ4559]成绩比较(动态规划,拉格朗日插值) 题面 BZOJ 洛谷 题解 显然可以每门课顺次考虑, 设\(f[i][j]\)表示前\(i\)门课程\(zsy\)恰好碾压了\(j\)个\(yy ...

  2. 【BZOJ4559】[JLoi2016]成绩比较 动态规划+容斥+组合数学

    [BZOJ4559][JLoi2016]成绩比较 Description G系共有n位同学,M门必修课.这N位同学的编号为0到N-1的整数,其中B神的编号为0号.这M门必修课编号为0到M-1的整数.一 ...

  3. 【bzoj4559】成绩比较

    Portal -->bzoj4559 补档计划 ​  借这题补个档--拉格朗日插值 ​​  插值的话大概就是有一个\(n-1\)次多项式\(A(x)\),你只知道它在\(n\)处的点值,分别是\ ...

  4. 【BZOJ4559】成绩比较(组合计数,容斥原理)

    题意: G系共有n位同学,M门必修课.这N位同学的编号为0到N-1的整数,其中B神的编号为0号.这M门必修课编号为0到M- 1的整数.一位同学在必修课上可以获得的分数是1到Ui中的一个整数.如果在每门 ...

  5. bzoj4559[JLoi2016]成绩比较 容斥+拉格朗日插值法

    4559: [JLoi2016]成绩比较 Time Limit: 20 Sec  Memory Limit: 256 MBSubmit: 261  Solved: 165[Submit][Status ...

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

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

  7. BZOJ4559 JLOI2016成绩比较(容斥原理+组合数学+斯特林数)

    容斥一发改为计算至少碾压k人的情况数量,这样对于每门课就可以分开考虑再相乘了.剩下的问题是给出某人的排名和分数的值域,求方案数.枚举出现了几种不同的分数,再枚举被给出的人的分数排第几,算一个类似斯特林 ...

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

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

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

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

随机推荐

  1. Keras文本预处理

    学习了Keras文档里的文本预处理部分,参考网上代码写了个例子 import keras.preprocessing.text as T from keras.preprocessing.text i ...

  2. linux中的文件类型标记方法

    在ls -l显示的详细信息中有以下信息: -rw-r--r-- drwxr-xr-x 一共10个字符,第一个字符表示文件类型,后面9个字符分成3组表示文件权限.前三个表示属主(拥有者)对文件的权限,中 ...

  3. 还在拼字符串?试试HTML5的template标签

    HTML5中<template>标签的详细介绍(图文) 这篇文章主要介绍了HTML5中的template标签,是HTML5入门中的重要知识,需要的朋友可以参考 一.HTML5 templa ...

  4. VUE事件修饰符.passive、.capture、.once实现原理——重新认识addEventListener方法

    https://www.jianshu.com/p/b12d0d3ad4c1 .passive的作用与使用场景 https://juejin.im/post/5ad804c1f265da504547f ...

  5. Android Drawable - Shape Drawable使用详解(附图)

    TIPS shape图形 –简单介绍 shape图形 –如何画? shape图形 –参数详细解析 shape图形 –如何用? shape图形 –实际开发应用场景 shape图形简单介绍 用xml实现一 ...

  6. $vjudge-$搜索专题题解

    退役了,刷点儿无脑水题$bushi$放松下$QwQ$ 然后先放个链接,,,$QwQ$ $A$ 虽然是英文但并不难$get$题目大意?就说给定一个数独要求解出来,$over$ 昂显然直接$dfs$加剪枝 ...

  7. 对 Redux 一头雾水?看完这篇就懂了

    首先,学习 Redux 可能会很困难 当你终于学会了如何使用 React,也有了自己去构建一些应用的信心,那会是一种非常棒的感觉.你学会了管理状态,一切看起来井井有条.但是,很有可能这就到了你该学习 ...

  8. ElementUi 两个表格反选

    ElementUi 两个表格反选 1.先看看实现的图 表格内容显示 <el-row :gutter="20"> <el-col :span="16&qu ...

  9. linux下配置vnc-server 和gnome-session

    机器比较老,安装时间也十分久远,所以也不知道实验室系统当时是不是完全安装,最近需要使用vnc登录显示界面,结果问题就来了...没有安装vnc-server. (1)机器系统是rhel6.2的,所以就从 ...

  10. 图解kubernetes调度器SchedulerCache核心源码实现

    SchedulerCache是kubernetes scheduler中负责本地数据缓存的核心数据结构, 其实现了Cache接口,负责存储从apiserver获取的数据,提供给Scheduler调度器 ...