题目: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. 【HackerRank】Running Time of Quicksort

    题目链接:Running Time of Quicksort Challenge In practice, how much faster is Quicksort (in-place) than I ...

  2. 生信基础概念之unique reads VS multi-mapping reads

    unique reads:在参考组上只有一个匹配点 multi-mapping reads:在参考组上有多个匹配点 下面是tophat的一个结果案例: Reads: Input : Mapped : ...

  3. 外网IP地址API

    新浪的IP地址查询接口:http://int.dpool.sina.com.cn/iplookup/iplookup.php?format=js 新浪多地域测试方法:http://int.dpool. ...

  4. python脚本发送电子邮件

    #!/usr/bin/pythonimport smtplibimport stringHOST='smtp.qq.com'#HOST='mail.qq.com'SUBJECT='Test email ...

  5. java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: Failed to start component...

    今天开发犯了一个特lowB的错,记录下来,引以为戒! 严重: A child container failed during start java.util.concurrent.ExecutionE ...

  6. SG函数略解

    由于笔者太懒,懒得把原来的markdown改成MCE,所以有很多奇怪的地方请谅解. 先说nim游戏. 大意:有n堆石子,两个人轮流取,每个人每次从任意一堆取任意个,直到一个人无法取了为止.问对于石子的 ...

  7. Flume架构及运行机制

    flume 作为 cloudera 开发的实时日志收集系统,受到了业界的认可与广泛应用.Flume 初始的发行版本目前被统称为 Flume OG(original generation),属于 clo ...

  8. HDU 5037 Frog(2014年北京网络赛 F 贪心)

    开始就觉得有思路,结果越敲越麻烦...  题意很简单,就是说一个青蛙从0点跳到m点,最多可以跳l的长度,原有石头n个(都仅表示一个点).但是可能跳不过去,所以你是上帝,可以随便在哪儿添加石头,你的策略 ...

  9. UOJ283 直径拆除鸡

    本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作. 本文作者:ljh2000 作者博客:http://www.cnblogs.com/ljh2000-jump/ ...

  10. 爬虫之MongoDB

    一.简介 MongoDB是一款强大.灵活.且易于扩展的通用型数据库 1.易用性 MongoDB是一个面向文档(document-oriented)的数据库,而不是关系型数据库. 不采用关系型主要是为了 ...