bzoj4559 成绩比较【动态规划+拉格朗日插值法】
来源:互联网 发布:the weeknd 知乎 编辑:程序博客网 时间:2024/05/16 15:28
解题思路:
我们设
假设从
没被碾压的人数本应增加
则有
还有
例如
考虑第
由于
由于
至此得到总的dp方程:
f[i][j]=g(i)∑w=0jCt1n−1−wCt2wf[i−1][w]
时间复杂度为
#include<iostream>#include<cstdio>#include<cstring>#include<string>#include<algorithm>#include<cmath>#include<ctime>#include<queue>#include<vector>#include<set>#include<map>#define ll long longusing namespace std;int getint(){ int i=0,f=1;char c; for(c=getchar();(c<'0'||c>'9')&&c!='-';c=getchar()); if(c=='-')c=getchar(),f=-1; for(;c>='0'&&c<='9';c=getchar())i=(i<<3)+(i<<1)+c-'0'; return i*f;}const int N=105,p=1e9+7;int n,m,k;int U[N],R[N],c[N][N],f[N][N];int g[N],inv[N];int ksm(int x,int y){ x%=p;int res=1; for(;y;y>>=1,x=1ll*x*x%p) if(y&1)res=1ll*res*x%p; return res;}int Inter(int u,int r){ memset(g,0,sizeof(g)); for(int x=1;x<=n+1;x++) { for(int i=1;i<=x;i++) g[x]=(g[x]+1ll*ksm(x-i,r-1)*ksm(i,n-r)%p)%p; if(u==x)return g[x]; } for(int i=1;i<=n+1;i++) { inv[i]=1; for(int j=1;j<=n+1;j++) if(i!=j)inv[i]=(1ll*inv[i]*(i-j)%p+p)%p; inv[i]=ksm(inv[i],p-2); } int res=0; for(int i=1;i<=n+1;i++) { int tmp=1ll*inv[i]*g[i]%p; for(int j=1;j<=n+1;j++) if(i!=j)tmp=1ll*tmp*(u-j)%p; res=(res+tmp)%p; } return res;}int C(int i,int j){ if(i<0||j<0||j>i)return 0; return c[i][j];}int main(){ //freopen("lx.in","r",stdin); //freopen("lx.out","w",stdout); n=getint(),m=getint(),k=getint(); for(int i=1;i<=m;i++)U[i]=getint(); for(int i=1;i<=m;i++)R[i]=getint(); c[0][0]=1; for(int i=1;i<=n;i++) { c[i][0]=1; for(int j=1;j<=n;j++) c[i][j]=(c[i-1][j]+c[i-1][j-1])%p; } f[0][0]=1; for(int i=1;i<=m;i++) { int tmp=Inter(U[i],R[i]); for(int j=0;j<=n;j++) { for(int w=0;w<=j;w++) f[i][j]=(f[i][j]+1ll*f[i-1][w]*C(n-1-w,j-w)%p*C(w,R[i]-1-(j-w))%p*tmp%p)%p; } } cout<<f[m][n-1-k]<<'\n'; return 0;}
阅读全文
0 0
- bzoj4559 成绩比较【动态规划+拉格朗日插值法】
- bzoj4559【JLOI2016】成绩比较
- 贪心、动态规划的比较
- 比较成绩
- 备忘录方法与动态规划比较
- POJ 1088 比较有意思的动态规划
- 分治法、动态规划、贪心法比较
- 分治法,动态规划,贪心算法比较
- 分治法、动态规划、贪心法比较
- hdu 1500 Chopsticks 动态规划 比较经典
- 备忘录方法与动态规划比较
- 动态规划与贪心算法的比较
- 贪心算法与动态规划的比较
- 动态规划和贪心算法的比较
- 动态规划!!!动态规划!!!
- 01背包动态规划两种解决方案的比较
- 动态规划,Dijkstra算法,A*算法的比较
- 《动态规划》之--字符串比较问题(扩展距离)
- python实现简单爬虫功能
- 数组(Array)和列表(ArrayList)的区别
- 没想到啊!3980元的Web前端视频今日免费送。
- 设计模式(八)------23种设计模式(1):单例模式
- 解析webservice的wsdl地址
- bzoj4559 成绩比较【动态规划+拉格朗日插值法】
- QT控件大全 四十三 QSintCharts
- 开源 java CMS
- 简单使用Dagger2
- Java中Array与ArrayList的主要区别
- TeamTalk
- C# 基本数据将类型
- Android基础知识一(Dalvik虚拟机(DVM)、基本架构、启动过程)
- Python使用MySQL数据库