CodeChef Little Elephant and Movies [DP 排列]
https://www.codechef.com/FEB14/problems/LEMOVIE
题意:
对于一个序列,定义其“激动值”为序列中严格大于前面所有数的元素的个数。
给定n个数p1;,p2... pn,求这n个数的所有排列中,激动值不超过k的个数。$1 k \le n \le 200,1 \le pi \le 200$
这种题有一个很神的想法:
把排列按某种顺序往里插入,使得后不会影响前
对于本题,先离散化去重后,从大到小插入,后插入的元素不会影响已经插入的元素严格大于前面所有数
$f[i][j]$表示插入了前$i$大的数,激动值为$j$的方案数
激动值改变只有可能是当前要插入的数中有一个放在了最前面
转移时分类讨论有没有数插在最前面,需要用到隔板法,
设已经插入$x$个数,第$i$大的有$y$个数
$f(i,j)=f(i-1,j)*\binom{x+y-1}{x-1}*{y!}\ +\ f(i-1,j-1)*\binom{x+y-1}{x}*{y!}$
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
typedef long long ll;
const int N=,INF=1e9+,P=1e9+;
inline int read(){
char c=getchar();int x=,f=;
while(c<''||c>''){if(c=='-')f=-;c=getchar();}
while(c>=''&&c<=''){x=x*+c-'';c=getchar();}
return x*f;
}
int n,k,a[N];
int m,d[N],s[N];
inline bool cmp(int a,int b){return a>b;}
ll c[N][N],fac[N];
inline void mod(ll &x){if(x>=P) x-=P;}
void ini(){
c[][]=;fac[]=;
for(int i=;i<=;i++){
c[i][]=;
for(int j=;j<=i;j++) mod(c[i][j]+=c[i-][j]+c[i-][j-]);
fac[i]=fac[i-]*i%P;
}
}
ll f[N][N];
void dp(){
f[][]=;
for(int i=;i<=m;i++)
for(int j=;j<=k;j++){
int x=s[i-],y=d[i];
f[i][j]=f[i-][j]*c[x+y-][x-]%P*fac[y]%P;
mod(f[i][j]+=f[i-][j-]*c[x+y-][x]%P*fac[y]%P);
//printf("f %d %d %lld\n",i,j,f[i][j]);
}
ll ans=;
for(int i=;i<=k;i++) mod(ans+=f[m][i]);
printf("%lld\n",ans);
}
int main(){
freopen("in","r",stdin);
ini();
int T=read();
while(T--){
memset(d,,sizeof(d));
n=read();k=read();
for(int i=;i<=n;i++) a[i]=read();
sort(a+,a++n,cmp);
m=;
d[++m]=;
for(int i=;i<=n;i++){
if(a[i]==a[i-]) d[m]++;
else d[++m]=;
}
for(int i=;i<=m;i++) s[i]=s[i-]+d[i];
//for(int i=1;i<=m;i++) printf("%d ",d[i]);puts("");
//for(int i=1;i<=m;i++) printf("%d ",s[i]);puts("");
dp();
}
}
CodeChef Little Elephant and Movies [DP 排列]的更多相关文章
- CodeChef Little Elephant and Mouses [DP]
https://www.codechef.com/problems/LEMOUSE 题意: 有一个n *m的网格.有一头大象,初始时在(1,1),要移动到(n,m),每次只能向右或者向下走.有些格子中 ...
- 【BZOJ】2111: [ZJOI2010]Perm 排列计数 计数DP+排列组合+lucas
[题目]BZOJ 2111 [题意]求有多少1~n的排列,满足\(A_i>A_{\frac{i}{2}}\),输出对p取模的结果.\(n \leq 10^6,p \leq 10^9\),p是素数 ...
- 【BZOJ】4559: [JLoi2016]成绩比较 计数DP+排列组合+拉格朗日插值
[题意]n位同学(其中一位是B神),m门必修课,每门必修课的分数是[1,Ui].B神碾压了k位同学(所有课分数<=B神),且第x门课有rx-1位同学的分数高于B神,求满足条件的分数情况数.当有一 ...
- G.subsequence 1(dp + 排列组合)
subsequence 1 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言524288K 64bit IO Format: %lld 题目描述 You are ...
- CodeChef - LEMOVIE Little Elephant and Movies
Read problems statements in Mandarin Chineseand Russian. Little Elephant from Zoo of Lviv likes to w ...
- LightOJ1005 Rooks(DP/排列组合)
题目是在n*n的棋盘上放k个车使其不互相攻击的方案数. 首先可以明确的是n*n最多只能合法地放n个车,即每一行都指派一个列去放车. dp[i][j]表示棋盘前i行总共放了j个车的方案数 dp[0][0 ...
- CF 258B Little Elephant and Elections [dp+组合]
给出1,2,3...m 任取7个互不同样的数a1,a2,a3,a4,a5,a6,a7 一个数的幸运度是数位上4或7的个数 比方244.470幸运度是2. 44434,7276727.4747,7474 ...
- 洛谷 P3672 小清新签到题 [DP 排列]
传送门 题意:给定自然数n.k.x,你要求出第k小的长度为n的逆序对对数为x的1~n的排列 $n \le 300, k \le 10^13$ 一下子想到hzc讲过的DP 从小到大插入,后插入不会对前插 ...
- CodeChef Cards, bags and coins [DP 泛型背包]
https://www.codechef.com/problems/ANUCBC n个数字,选出其一个子集.求有多少子集满足其中数字之和是m的倍数.n $\le$ 100000,m $\le$ 100 ...
随机推荐
- UnityShader 表面着色器简单例程集合
0.前言 这些简单的shader程序都是写于2015年的暑假.当时实验室空调坏了,30多个人在实验室中挥汗如雨,闷热中学习shader的日子还历历在目.这些文章闲置在我个人博客中,一年将过,师弟也到了 ...
- 用.net中的SqlBulkCopy类批量复制数据 (转载)
在软件开发中,把数据从一个地方复制到另一个地方是一个普遍的应用. 在很多不同的场合都会执行这个操作,包括旧系统到新系统的移植,从不同的数据库备份数据和收集数据. .NET 2.0有一个SqlBulkC ...
- ZOJ 1203 Swordfish
题目: There exists a world within our world A world beneath what we call cyberspace. A world protected ...
- Spring MVC 学习总结(一)——MVC概要与环境配置 转载自【张果】博客
Spring MVC 学习总结(一)--MVC概要与环境配置 目录 一.MVC概要 二.Spring MVC介绍 三.第一个Spring MVC 项目:Hello World 3.1.通过Mave ...
- vmstat & mpstat & w
vmstat # vmstat 3 2procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu----- ...
- 从零开始学习前端开发 — 6、CSS布局模型
一.css布局模型 1.流动模型(Flow) 元素在不设置css样式时的布局模型,是块元素就独占一行,是内联元素就在一行逐个进行显示 2.浮动模型(Float) 使用float属性来进行网页布局,给元 ...
- CCF系列之画图(201409-2)
试题编号: 201409-2试题名称: 画图时间限制: 1.0s内存限制: 256.0MB问题描述: 问题描述 在一个定义了直角坐标系的纸上,画一个(x1,y1)到(x2,y2)的矩形指将横坐标范围从 ...
- mybatis if条件查询 及<号的问题
摘录自:http://flt95.blog.163.com/blog/static/12736128920136185841551/ <if test="p=='1'"> ...
- shopnc验证码显示不了
data/config文件编码问题,要utf-8无bom
- selenium+python自动化测试系列(二):AutoIt工具实现本地文件上传
AutoIt使用简单说明 AutoIt的安装这里就不在啰嗦,可以参考AutoIt安装或者自行搜索解决. 第一步:定位上传文件路径的文本框 这里举例说明,如何定位?如图 这里我们看到上传文件的类型是bu ...