题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4559

关于拉格朗日插值,可以看这些博客:

https://www.cnblogs.com/ECJTUACM-873284962/p/6833391.html

https://blog.csdn.net/qq_35649707/article/details/78018944

这个题要先想好DP方程。dp[ i ][ j ]表示第 i 门课、目前有 j 个人被“碾压”。

dp[ i ][ j ]=sigma( dp[ i-1 ][ k ] * C( k , j ) * C( n-k-1 , n-rk[ i ]-j ) * g[ i ] )。其中 g[ i ]=sigma(d=1~u[ i ]) d^(n-rk[ i ]) * ( u[ i ]-d )^(rk[ i ]-1)。

C( k , j )表示从上一次的 k 个人里选 j 个人作为这次还是分数<=自己的人;第二个C就是在已经不被碾压的人中选一些满足自己的排名。

然后每个人的分数是在自己之上还是在自己之下就确定了。枚举自己的分数,在自己之下的人每个有 d 种选择,在自己之上的人每个有 ( u[ ] - d ) 种选择。

g用拉格朗日插值算就行。是一个 n-1 次函数。但不知为何需要 n+1 个点才行。

注意 upd( ) 里写上 & !!!!!

负数的逆元果然可以是它相反数逆元的相反数。

最后是恰好 K 个人,不是大于等于 K 个人。

注意 g 是sigma的,不是单独的 d^( ) * ( )^( ) 。

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define ll long long
using namespace std;
const int N=,mod=1e9+;
int n,m,t,u[N],rk[N],dp[N][N],c[N][N],g[N],y[N],inv[N],ans;
void upd(int &x){x>=mod?x-=mod:;x<?x+=mod:;}//////&!!!!!!!
int pw(int x,int k)
{
int ret=;while(k){if(k&)ret=(ll)ret*x%mod;x=(ll)x*x%mod;k>>=;}return ret;
}
int calc(int lm,int n,int m)
{
int ret=,d=n+m+;//+2?
if(lm<=d)
{
for(int i=;i<=lm;i++)
ret=(ret+(ll)pw(i,n)*pw(lm-i,m))%mod;
return ret;
}
for(int i=;i<=d;i++)
{
y[i]=(y[i-]+(ll)pw(i,n)*pw(lm-i,m))%mod;//y[i-1]+* !!
int tmp=;
for(int j=;j<=d;j++)
{
if(j==i)continue;
if(i>j)
tmp=(ll)tmp*(lm-j)%mod*inv[i-j]%mod;
else
tmp=(ll)tmp*(j-lm)%mod*inv[j-i]%mod;
}
ret=(ret+(ll)tmp*y[i])%mod;
}
return ret;
}
void init()
{
for(int i=;i<=n;i++)c[i][]=;
for(int i=;i<=n;i++)
for(int j=;j<=i;j++)
c[i][j]=c[i-][j]+c[i-][j-],upd(c[i][j]);
for(int i=;i<=n;i++)inv[i]=pw(i,mod-);
for(int i=;i<=m;i++)
g[i]=calc(u[i],n-rk[i],rk[i]-);
}
int main()
{
scanf("%d%d%d",&n,&m,&t);
for(int i=;i<=m;i++)scanf("%d",&u[i]);
for(int i=;i<=m;i++)scanf("%d",&rk[i]);
init();
dp[][n-]=; int mn0=n-,mn1=n-;
for(int i=;i<=m;i++)
{
mn1=min(mn0,n-rk[i]);
for(int j=t;j<=mn1;j++)//t
{
for(int k=j;k<=mn0;k++)
if(dp[i-][k])
dp[i][j]=(dp[i][j]+(ll)dp[i-][k]*c[k][j]%mod*c[n--k][n-rk[i]-j]%mod*g[i])%mod;
}
mn0=mn1;
}
printf("%d\n",dp[m][t]);
return ;
}

bzoj 4559 [JLoi2016]成绩比较——拉格朗日插值的更多相关文章

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

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

  2. BZOJ.4559.[JLOI2016]成绩比较(DP/容斥 拉格朗日插值)

    BZOJ 洛谷 为什么已经9点了...我写了多久... 求方案数,考虑DP... \(f[i][j]\)表示到第\(i\)门课,还有\(j\)人会被碾压的方案数. 那么\[f[i][j]=\sum_{ ...

  3. ●BZOJ 4559 [JLoi2016]成绩比较

    题链: http://www.lydsy.com/JudgeOnline/problem.php?id=4559 题解: 计数dp,拉格朗日插值法.真的是神题啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊 ...

  4. ●BZOJ 4559 [JLoi2016]成绩比较(容斥)

    题链: http://www.lydsy.com/JudgeOnline/problem.php?id=4559 题解: 容斥,拉格朗日插值法. 结合网上的另一种方法,以及插值法,可以把本题做到 O( ...

  5. 【BZOJ】4559: [JLoi2016]成绩比较 计数DP+排列组合+拉格朗日插值

    [题意]n位同学(其中一位是B神),m门必修课,每门必修课的分数是[1,Ui].B神碾压了k位同学(所有课分数<=B神),且第x门课有rx-1位同学的分数高于B神,求满足条件的分数情况数.当有一 ...

  6. BZOJ.3453.tyvj 1858 XLkxc(拉格朗日插值)

    BZOJ 题意即求\[\sum_{i=0}^n\sum_{j=1}^{a+id}\sum_{x=1}^jx^k\] 我们知道最后一个\(\sum\)是自然数幂和,设\(f(n)=\sum_{x=1}^ ...

  7. 【BZOJ】2655: calc 动态规划+拉格朗日插值

    [题意]一个序列$a_1,...,a_n$合法当且仅当它们都是[1,A]中的数字且互不相同,一个序列的价值定义为数字的乘积,求所有序列的价值和.n<=500,A<=10^9,n+1< ...

  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]成绩比较 容斥+拉格朗日插值法

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

随机推荐

  1. 网络:W5500 UDP数据包格式注意事项

     1. 主题 使用W5500测试UDP功能,发现收到的数据包和wireshark抓包的数据不同. 原来W5500接收寄存器的数据包并不是网络上的数据流,而是经过内部处理后展现出来的. 对于这个问题目前 ...

  2. MIPI DSI协议学习【转】

    本文转载自:http://www.voidcn.com/blog/LoongEmbedded/article/p-6109759.html 1.     MIPI DSI DSI:displayser ...

  3. Android LCD(一):LCD基本原理【转】

    本文转载自:http://blog.csdn.net/longxiaowu/article/details/24787597 关键词:Android LCD TFT 液晶 偏光片 彩色滤光片  背光 ...

  4. maven 一个简单项目 —— maven权威指南学习笔记(三)

    目标: 对构建生命周期 (build  lifecycle),Maven仓库 (repositories),依赖管理 (dependency management)和项目对象模型 (Project O ...

  5. Centos6.5安装php5.6.7

    1. 下载 官网:http://php.net/downloads.php wget http://cn2.php.net/get/php-5.6.7.tar.gz/from/this/mirror ...

  6. R语言笔记002——sample()函数

    sample()函数 sample(x,size,replace=FALSE) x表示一个或多个向量,size表示从x中随机取的样本个数,replace=FALSE表示不放回抽样,即不会选取到相同的值 ...

  7. python常见的PEP8规范

    1. 括号中使用垂直隐式缩进或使用悬挂缩进 缩进 每级缩进用4个空格 示例: (垂直隐式缩进)对准左括号 def function_name(var_one,var_two, var_three,va ...

  8. Thinkpad E440个性化设置:如何/禁用关闭触摸板?

    #如何禁用/关闭触摸版 默认情况下,ThinkPad E440是不支持触摸板的关闭功能,如果要关闭的话,需要去官方下载相应的鼠标驱动 UltraNav. 下载地址:http://think.lenov ...

  9. js数组的操作方法

    es5中新添加的方法比如map,reduce之类的

  10. java: i18n语言

    <%@ page language="java" contentType="text/html; charset=utf8"%> <%@ pa ...