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

看了看拉格朗日插值:http://www.cnblogs.com/ECJTUACM-873284962/p/6833391.html

https://blog.csdn.net/lvzelong2014/article/details/79159346

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

还只会最简单的那种,正好在这道题里可以用到;

计算方案数,可以考虑DP,利用那个所有成绩都小于 B 的性质,枚举超过 B 的一门课;

设计 f[i][j] 表示当前到了第 i 门课,还剩 j 个人被碾压(一开始是所有人都被碾压,然后渐渐突破...);

则 f[i][j] = ∑(j<=t<=n-1) f[i-1][t] * C(n-1-t,rk[i]-1-(t-j)) * C(t,j) * g[i]

其中第一个组合数表示在 n-1-t 个上一次已经不被碾压的人中选出  rk[i]-1-(t-j) 个作为这次成绩高于 B 的人,第二个组合数表示从 t 个上次被碾压的人中选出 j 个这次仍然被碾压(也等同与选出 t-j 个人这次成绩高于 B );

g[i] 则表示在 i 这门课上的成绩分布情况,则选出的人的成绩可以对号入座;

而 g[i] = ∑(1<=j<=lim[i]) j^(n-rk[i]) * (lim[i]-j)^(rk[i]-1),表示若 B 的成绩是 j,则有 n-rk[i] 个人的成绩在 1~j 中选择,有 rk[i]-1 个人的成绩在 lim[i]-j~lim[i] 中选择;

可以发现这是个大约 n+1 次的多项式,所以设出几个点,求出当 x=lim 时的取值即可,这个过程的复杂度是 n^2 的。

代码如下:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
typedef long long ll;
int const xn=105,mod=1e9+7;
int n,m,K,lm[xn],rk[xn],g[xn],c[xn][xn],f[xn][xn],xx[xn],yy[xn];
int rd()
{int ret=0,f=1; char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-')f=0; ch=getchar();}while(ch>='0'&&ch<='9')ret=(ret<<3)+(ret<<1)+ch-'0',ch=getchar();return f?ret:-ret;
}
int pw(ll a,int b)
{ll ret=1; for(;b;b>>=1,a=(a*a)%mod)if(b&1)ret=(ret*a)%mod;return ret;
}
int upt(int x){while(x>=mod)x-=mod; while(x<0)x+=mod; return x;}
void init()
{for(int i=0;i<=n;i++)c[i][0]=1;for(int i=1;i<=n;i++)for(int j=1;j<=i;j++)c[i][j]=upt(c[i-1][j]+c[i-1][j-1]);
}
int solve(int lim,int n,int m)
{int num=n+m+2,sum=0;for(int i=1;i<=num;i++)xx[i]=i,yy[i]=upt(yy[i-1]+(ll)pw(i,n)*pw(lim-i,m)%mod);for(int i=1;i<=num;i++){ll s1=1,s2=1;for(int j=1;j<=num;j++)if(i!=j)//!!!s1=s1*(lim-xx[j])%mod,s2=s2*(xx[i]-xx[j])%mod;sum=upt(sum+s1*pw(s2,mod-2)%mod*yy[i]%mod);}return sum;
}
int main()
{n=rd()-1; m=rd(); K=rd(); init();//n-1for(int i=1;i<=m;i++)lm[i]=rd();for(int i=1;i<=m;i++)rk[i]=rd(),g[i]=solve(lm[i],n-rk[i]+1,rk[i]-1);//+1f[0][n]=1;//nfor(int i=1;i<=m;i++)for(int j=K;j<=n;j++)//kfor(int t=j;t<=n;t++){if(t-j>rk[i]-1||j>n-rk[i]+1)continue;//+1!f[i][j]=upt(f[i][j]+(ll)f[i-1][t]*c[t][j]%mod*c[n-t][rk[i]-1-t+j]%mod*g[i]%mod);}printf("%d\n",f[m][K]);return 0;
}

转载于:https://www.cnblogs.com/Zinn/p/10006681.html

bzoj 4559 [JLoi2016]成绩比较 —— DP+拉格朗日插值相关推荐

  1. 【BZOJ4559】【JLOI2016】—成绩比较(拉格朗日插值+dp)

    传送门 dpdpdp f[i][j]f[i][j]f[i][j]表示前iii门课,有jjj个人没有被碾压的方案数 考虑f[i−1][j]f[i-1][j]f[i−1][j]转移到f[i][w](j≤w ...

  2. BZOJ 2137 submultiple(约数,拉格朗日插值求自然数k次幂和)【BZOJ 修复工程】

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 题目链接 https://hydro.ac/d/bzoj/p/2137 是 hydro 的 BZOJ ...

  3. F. Cowmpany Cowmpensation(树形dp + 拉格朗日插值)

    F. Cowmpany Cowmpensation 首先一般dp推导dp[i][j]=∏u∈soni∑k=1jdp[v][k]dp[i][j] = \prod\limits_{u \in son_i} ...

  4. bzoj 5339 [TJOI2018]教科书般的亵渎 拉格朗日插值

    题面 题目传送门 解法 可以发现,题目可以转化成求若干个形如\(\sum_{i=1}^ni^k\)的东西 这个东西可以拉格朗日插值 大概讲一下拉格朗日插值是个什么东西: 显然,\(\sum_{i=1} ...

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

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

  6. 洛谷P4463:calc(dp、拉格朗日插值)

    Solution\text{Solution}Solution 神奇题目. 首先可以强制所有的数递增,最后的答案乘一个 n!n!n! 即可. 设 dpi,jdp_{i,j}dpi,j​ 表示在 [1, ...

  7. [CF995F] Cowmpany Cowmpensation(树形dp,拉格朗日插值)

    树形DP: 设f[u][i]f[u][i]f[u][i]表示给uuu的子树分配工资,uuu点工资为iii的方案数 f[u][i]=∏v∈sonu(∑j=1if[v][j])f[u][i]=\prod\ ...

  8. 解题报告(三)多项式求值与插值(拉格朗日插值)(ACM / OI)

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 繁凡出品的全新系列:解题报告系列 -- 超高质量算法题单,配套我写的超高质量的题解和代码,题目难度不一 ...

  9. [JLOI2016]成绩比较

    [JLOI2016]成绩比较 题目描述 Solution 考虑dpdpdp. 令fi,jf_{i,j}fi,j​表示前iii个科目中有jjj个人被碾压的方案数. 转移显然为: fi,j=∑k≥jfi− ...

最新文章

  1. zabbix mysql 8g优化_Zabbix分区优化
  2. android android:process=,Android app启动流程
  3. mysql innodb创建数据文件失败
  4. 安卓10省电还是费电_iOS 13省电教程:关掉这8个功能iPhone多用3小时
  5. Mac与Phy组成原理的简单分析
  6. mac下 home-brew安装及php,nginx环境安装及配置
  7. 99%的程序都没有考虑的网络异常
  8. 蓝桥杯 ADV-111 算法提高 Quadratic Equation
  9. CCF 201604-4 游戏
  10. 遍历文件夹下的所有文件
  11. 支持全文搜索的桌面搜索工具
  12. 解决Adobe Flash Player已不再受支持的问题
  13. STM8L IAP升级过程记录
  14. 对PID的理解及其实现公式
  15. 获取当前时间戳的方法
  16. 中信证券显示连接服务器,我的中信证券的交易软件真不好用
  17. STM32F4的基础介绍
  18. 浅谈Android性能优化方案
  19. 整整7天,梳理 Java开发2022年(图文+代码)面试题及答案
  20. 缓解论文写作压力的小妙招

热门文章

  1. 10进制颜色 转换成 16进制
  2. shell的基础学习
  3. linux下qq客户端
  4. android 继承dialog自定义对话框
  5. GraphQL是什么“渣渣“?它想干掉RESTful
  6. 高质量的缺陷分析:让自己少写 bug
  7. Spring Boot 返回 JSON 数据,一分钟搞定!
  8. 我是怎么把一个项目带崩的
  9. 33.向vector里面添加数字,换行敲下输入结束
  10. 【Linux 报错】com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure The las