动态规划(计数DP):JLOI 2016 成绩比较
Description
Input
Output
仅一行一个正整数,表示满足条件的情况数模10^9+7的余数。
Sample Input
2 2
1 2
Sample Output
#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
const int N=,Mod=;
int n,m,K,u[N],r[N];
typedef long long LL;
LL fac[N],ifac[N],c[N][N],f[N],g[N];
LL Inv(LL x){return x==?:(Mod-Mod/x)*Inv(Mod%x)%Mod;}
LL C(int x,int y){
if(x<y||x<||y<)return ;
return fac[x]*ifac[y]%Mod*ifac[x-y]%Mod;
} LL Quick_pow(LL x,LL y){
LL ret=;
while(y){
if(y&)ret=ret*x%Mod;
y>>=;x=x*x%Mod;
}
return ret;
} int main(){
scanf("%d%d%d",&n,&m,&K);
for(int i=;i<=m;i++)
scanf("%d",&u[i]);
for(int i=;i<=m;i++)
scanf("%d",&r[i]);
fac[]=ifac[]=;
for(int i=;i<N;i++){
fac[i]=fac[i-]*i%Mod;
ifac[i]=Inv(fac[i]);
}
for(int i=n-;i>=K;i--){
f[i]=C(n-,i);
for(int j=;j<=m;j++)
(f[i]*=C(n-i-,r[j]-))%=Mod;
for(int j=i+;j<n;j++){
(f[i]-=f[j]*C(j,i))%=Mod;
(f[i]+=Mod)%=Mod;
}
}
LL ans=f[K];
for(int i=;i<=m;i++){
LL R=r[i],U=u[i];
g[]=U;
for(int k=;k<=n;k++){
g[k]=Quick_pow(U+,k+)-;
for(int j=k-;j>=;j--)
(g[k]+=Mod-C(k+,j)*g[j]%Mod)%=Mod;
(g[k]*=Inv(C(k+,k)))%=Mod;
}
LL tmp=,rmp;
for(int j=,s=;j<=R;s*=-,j++){
rmp=(s+Mod)*C(R-,j-)%Mod;
(rmp*=Quick_pow(U,R-j))%=Mod;
(rmp*=g[n-R+j-])%=Mod;
(tmp+=rmp)%=Mod;
}
ans=ans*tmp%Mod;
}
printf("%lld\n",ans);
return ;
}
动态规划(计数DP):JLOI 2016 成绩比较的更多相关文章
- [JLOI 2016]成绩比较
Description 题库链接( \(\text{bzoj}\) 不知道为什么过不了啊... \(\text{luogu loj}\) 都能过...就给 \(\text{luogu}\) 的链接了. ...
- Leetcode之动态规划(DP)专题-338. 比特位计数(Counting Bits)
Leetcode之动态规划(DP)专题-338. 比特位计数(Counting Bits) 给定一个非负整数 num.对于 0 ≤ i ≤ num 范围中的每个数字 i ,计算其二进制数中的 1 的数 ...
- 【BZOJ】4559: [JLoi2016]成绩比较 计数DP+排列组合+拉格朗日插值
[题意]n位同学(其中一位是B神),m门必修课,每门必修课的分数是[1,Ui].B神碾压了k位同学(所有课分数<=B神),且第x门课有rx-1位同学的分数高于B神,求满足条件的分数情况数.当有一 ...
- 题解报告:hdu 1028 Ignatius and the Princess III(母函数or计数DP)
Problem Description "Well, it seems the first problem is too easy. I will let you know how fool ...
- HDU5800 To My Girlfriend 背包计数dp
分析:首先定义状态dp[i][j][s1][s2]代表前i个物品中,选若干个物品,总价值为j 其中s1个物品时必选,s2物品必不选的方案数 那么转移的时候可以考虑,第i个物品是可选可可不选的 dp[i ...
- CodeForces 176B Word Cut (计数DP)
Word Cut Time Limit:2000MS Memory Limit:262144KB 64bit IO Format:%I64d & %I64u Submit St ...
- [DP之计数DP]
其实说实在 我在写这篇博客的时候 才刚刚草了一道这样类型的题 之前几乎没有接触过 接触过也是平时比赛的 没有系统的做过 可以说0基础 我所理解的计数dp就是想办法去达到它要的目的 而且一定要非常劲非常 ...
- HDU4815/计数DP
题目链接[http://acm.hdu.edu.cn/showproblem.php?pid=4815] 简单说一下题意: 有n道题,每到题答对得分为a[ i ],假如A不输给B的最小概率是P,那么A ...
- HDU 6377 度度熊看球赛 (计数DP)
度度熊看球赛 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Subm ...
随机推荐
- JamCam创业故事:辞掉工作,去开发一个应用
编者按:这是JamCam创始人的自述.这家初创公司提供的应用很简单,但是极为成功:有了JamCam,你所录制的视频会自动添加你正在iPhone中聆听的音乐,作为视频的背景音乐.和朋友分享时是不是方便多 ...
- HDU 3555 Bomb (数位DP)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3555 题目大意:从0开始到给定的数字N所有的数字中遇到“49”的数字的个数. Sample Input ...
- 暑假集训(2)第九弹 ----- Points on Cycle(hdu1700)
Points on Cycle Time Limit:1000MS Memory Limit:32768 ...
- leetcode169——Majority Element (C++)
Given an array of size n, find the majority element. The majority element is the element that appear ...
- 桶排序之python实现源码
tmp = [] def bucket_sort(old): for i in range(len(old)): tmp.append([]) for i in old: tmp[int( i * l ...
- 模板:优先队列(priority_queue)
#include <iostream> #include <cstdio> #include <queue> #include <vector> usi ...
- Android Activity 生命周期详解
学习android开发这么久对于activity的生命周期还没有仔细思考过,所以,我大致的把这些东西整理一下,希望通过这使自己理解的更透彻点吧! 首先看一下Activity生命周期图和它的的四个阶段 ...
- Javascript自执行匿名函数(function() { })()的原理浅析
匿名函数就是没有函数名的函数.这篇文章主要介绍了Javascript自执行匿名函数(function() { })()的原理浅析的相关资料,需要的朋友可以参考下 函数是JavaScript中最灵活的一 ...
- Python全栈开发-web框架之django
一:web框架 什么是web框架? Web应用框架(Web application framework)是一种开发框架,用来支持动态网站.网络应用程序及网络服务的开发.这种框架有助于减轻网页开发时共通 ...
- 3D 服务器端以向量计算为主的角色位置的算法
把我以前学习过的一个东西拿出来分享下~ 3D服务器端玩家行走处理是服务器端根据客户端行走路径.玩家行走时间以及速度(包括变化速度)计算得出玩家的当前位置. 由于客户端行走是一条路径,不使用2D中的格子 ...