题意简单明确(

很容易知道最高的位置一定是左边能看到最高的和右边能看到最高的。于是我们考虑一个 dp:

设 \(dp[n][A][B]\) 表示长度为 \(n\) 的排列,左边有 \(A\) 个 balabala,右边有 \(B\) 个 balabala。

我们考虑每次令整个排列的元素全部加一,然后插入一个 \(1\)。

很明显,如果 \(1\) 插在最左边,会令 \(A+1\),如果插在最右边会令 \(B+1\),否则都不变。

于是得到了递推方程:

\[dp[n][A][B]=dp[n-1][A-1][B]+dp[n-1][A][B-1]+(n-2) \times dp[n-1][A][B]
\]

这样会得到 20pts 的好成绩。吸口氧不知道能不能跑快点儿。

观察 dp 的递推式,发现其存在组合意义:从 \((1,1,1)\) 到 \((n,A,B)\),令 \(n+1\) 会使 \(prod\) 乘上一个 \(n-1\) 。问所有路径的权值之和。

所以相当于从 \((1,n]\) 中选 \(A+B-2\) 个位置,其中 \(A-1\) 个位置为 \(0\),\(B-1\) 个位置为 \(1\),剩下的为下标减去 \(2\)。

于是问题变成了从 \([0,n-2]\) 中选择 \(A+B-2\) 个数删掉,所有方案剩下数之积之和。

从 \(n\) 个数中选择 \(m\) 个数删掉,似乎是经典的背包问题。

设 \(f[n][m]\) 为 \([0,n-2]\) 中删掉 \(m\) 个数的积之和。

然后你发现 \(f[1][1]\) 的定义出现了问题,于是重新设,设为 \([0,n-1]\),最后把 \(f[n][A+B-2]\) 改成 \(f[n-1][A+B-2]\) 就行。

这里的递推式为 \(f[n][m]=f[n-1][m] \times (n-1)+f[n-1][m-1]\)。

然后我们需要从 \(A+B-2\) 中选择 \(A-1\) 个位置令其为 \(1\),剩下的位置为 \(0\)。

所以答案就是 \(f[n-1][A+B-2] \times \binom {A+B-2} {A-1}\)。

写完题解后翻了一圈题解区,咋全是斯特林数,然后发现自己的 \(f\) 就是斯特林数/qd

#include<cstdio>
#include<cctype>
typedef unsigned ui;
const ui M=2e5+5,mod=1e9+7;
ui T,n[M],A[M],B[M],C[205][205],f[50005][205];
inline ui Add(const ui&a,const ui&b){
return a+b>=mod?a+b-mod:a+b;
}
inline ui read(){
ui n(0);char s;while(!isdigit(s=getchar()));
while(n=n*10+(s&15),isdigit(s=getchar()));return n;
}
inline void write(ui n){
static char s[10];ui top(0);
while(s[++top]=n%10^48,n/=10);
while(putchar(s[top]),--top);
}
signed main(){
ui i,j,mx(0);T=read();f[0][0]=C[0][0]=1;
for(i=1;i<=T;++i)n[i]=read(),A[i]=read(),B[i]=read(),n[i]>mx&&(mx=n[i]);
for(i=1;i<=mx;++i)for(j=1;j<=i&&j<=200;++j)f[i][j]=(f[i-1][j]*(i-1ull)+f[i-1][j-1])%mod;
for(i=1;i<=200;++i)for(C[i][0]=1,j=1;j<=200;++j)C[i][j]=Add(C[i-1][j],C[i-1][j-1]);
for(i=1;i<=T;++i)write(1ull*f[n[i]-1][A[i]+B[i]-2]*C[A[i]+B[i]-2][A[i]-1]%mod),putchar(10);
}

LGP4609题解的更多相关文章

  1. 2016 华南师大ACM校赛 SCNUCPC 非官方题解

    我要举报本次校赛出题人的消极出题!!! 官方题解请戳:http://3.scnuacm2015.sinaapp.com/?p=89(其实就是一堆代码没有题解) A. 树链剖分数据结构板题 题目大意:我 ...

  2. noip2016十连测题解

    以下代码为了阅读方便,省去以下头文件: #include <iostream> #include <stdio.h> #include <math.h> #incl ...

  3. BZOJ-2561-最小生成树 题解(最小割)

    2561: 最小生成树(题解) Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1628  Solved: 786 传送门:http://www.lyd ...

  4. Codeforces Round #353 (Div. 2) ABCDE 题解 python

    Problems     # Name     A Infinite Sequence standard input/output 1 s, 256 MB    x3509 B Restoring P ...

  5. 哈尔滨理工大学ACM全国邀请赛(网络同步赛)题解

    题目链接 提交连接:http://acm-software.hrbust.edu.cn/problemset.php?page=5 1470-1482 只做出来四道比较水的题目,还需要加强中等题的训练 ...

  6. 2016ACM青岛区域赛题解

    A.Relic Discovery_hdu5982 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Jav ...

  7. poj1399 hoj1037 Direct Visibility 题解 (宽搜)

    http://poj.org/problem?id=1399 http://acm.hit.edu.cn/hoj/problem/view?id=1037 题意: 在一个最多200*200的minec ...

  8. 网络流n题 题解

    学会了网络流,就经常闲的没事儿刷网络流--于是乎来一发题解. 1. COGS2093 花园的守护之神 题意:给定一个带权无向图,问至少删除多少条边才能使得s-t最短路的长度变长. 用Dijkstra或 ...

  9. CF100965C题解..

    求方程 \[ \begin{array}\\ \sum_{i=1}^n x_i & \equiv & a_1 \pmod{p} \\ \sum_{i=1}^n x_i^2 & ...

随机推荐

  1. iOS 学习资料Blog 技术论坛等,不断添加中。。。。

    iOS 学习资料整理 http://www.jianshu.com/p/dc81698a873c    中文 iOS/Mac 开发博客列表  https://github.com/tangqiaobo ...

  2. web虚拟主机、日志分割以及日志分析

    目录 一.构建虚拟web主机 1.1 概述 1.2 支持的虚拟主机类型 1.3 部署虚拟主机步骤 1.3.1 基于域名的虚拟主机 (1)为虚拟主机提供域名解析 (2)为虚拟主机准备网页文档 (3)添加 ...

  3. LeetCode随缘刷题之转化成小写字母

    这道题应该是最简单的一道题了把,简直在侮辱我. package leetcode.day_12_12; /** * 709. 转换成小写字母 * 给你一个字符串 s ,将该字符串中的大写字母转换成相同 ...

  4. 2、Golang基础--包的使用、if-else语句、循环、switch语句、数组、切片、可变函数参数、map类型

    1 包的使用 // 为了便于组织代码,同一种类型的代码,写在同一个包下,便于管理 // 定义包 -新建一个文件夹 -内部有很多go文件 -在每个go文件的第一行,都要声明包名,并且包名必须一致 -在一 ...

  5. 高可用 & 七层负载均衡与四层负载均衡

    内容概要 高可用 七层负载均衡 和 四层负载均衡 内容详细 一.高可用 1.什么是高可用 一般是指2台机器启动着完全相同的业务系统,当有一台机器down机了,另外一台服务器就能快速的接管,对于访问的用 ...

  6. 羽夏闲谈—— C 语言入门之问

    前言   最近加入了一个QQ频道,有很多想学C的纯小白.为什么这么说呢?因为他们会问一些环境用啥?为啥我配置不行?看了教程配置环境我也不会,咋配置?为啥这里代码这里有错误?啥语言好不好?诸如此类的问题 ...

  7. mysql,数据类型与表操作

    一.mysql基本认知 创建用户 create host aa identified with mysql_native_password by ''; 修改用户权限 alter user root@ ...

  8. 运行EXE文件,系统提示缺少api-ms-win-crt-runtime-l1-1-0.dll,解决方法!!

    api-ms-win-crt-runtime-l1-1-0.dll是一个Windows系统的应用程序拓展文件,也叫动态链接库文件.这个文件能帮助绝大多数用户解决在安装或启动部分游戏软件时出现计算机中丢 ...

  9. SQL Server 索引结构

    索引是数据库的基础,只有先搞明白索引的结构,才能搞明白索引运行的逻辑 本文通过 索引表.数据页.执行计划.IO统计.B+Tree 来尽可能的介绍 SQL 语句中 WHERE 部分,和 SELECT 部 ...

  10. IDEA tomcat启动报错----Artifact is being deployed, please wait...解决

    今天学习遇到了这个错误,记录下自己遇到的错误和解决方法! 这个报错的意思是: Artifact 正在部署中,请稍候- 实际上有可能就是jar包没有导进去.检查项目打包情况:file-->Proj ...