【动态规划】51nod1780 完美序列
巧妙的转化;f前两维大小开反TLE了一发……
Input
第一行一个数n(<=30000)表示完美序列的长度
第二行n个数,表示数列A(每个数<=10^9,每个数出现次数<=100)
Output
仅包含一个整数,表示可能的方案总数(对1,000,000,007取模)
题目分析
暑假讲过的题,今天第一眼还以为是什么玄妙计数……
因为从左到右构造不现实,于是考虑将数字从小到大构造。这样的好处在于现在插入的$i$只和上一次$i-1$的状态有关系。
$f[i][j][0/1][0/1]$表示处理到第$i$个数,第$i-1$个数两两间存空$j$个,左右两边分别是否有第$i-1$个数。转移的话就是用组合数统计,记得要预处理组合数。
所以总时间复杂度$O(n*4*100)$.
#include<bits/stdc++.h>
const int MO = ;
const int maxn = ; int f[maxn][][][];
int fac[],C[][];
int n,m,ans,a[maxn],t[maxn]; int read()
{
char ch = getchar();
int num = ;
for (; !isdigit(ch); ch=getchar());
for (; isdigit(ch); ch=getchar())
num = (num<<)+(num<<)+ch-;
return num;
}
int qmi(int a, int b)
{
int ret = ;
while (b)
{
if (b&) ret = 1ll*ret*a%MO;
a = 1ll*a*a%MO, b >>= ;
}
return ret;
}
inline void Add(int &x, int y){x = (x+1ll*y)%MO;}
int main()
{
n = read(), fac[] = ;
for (int i=; i<=n; i++) a[i] = read();
for (int i=; i<=; i++) fac[i] = 1ll*fac[i-]*i%MO;
for (int i=; i<=; i++)
for (int j=; j<=i; j++)
C[i][j] = 1ll*fac[i]*qmi(1ll*fac[j]*fac[i-j]%MO, MO-)%MO;
for (int i=, j=; i<=n; i++)
{
while (j<=n&&a[i]==a[j+]) j++;
if (a[i]+ < a[j+]){
puts("");
return ;
}
t[++m] = j-i+, i = j;
}
f[][t[]-][][] = ;
for (int i=; i<m; i++)
for (int j=; j<t[i]; j++)
for (int s1=; s1<=; s1++)
for (int s2=; s2<=; s2++)
if (f[i][j][s1][s2])
for (int k=; k<=j; k++)
for (int l1=; l1<=s1; l1++)
for (int l2=; l2<=s2; l2++)
if (k+l1+l2&&t[i+] >= k+l1+l2)
Add(f[i+][t[i+]-k-l1-l2][l1][l2], 1ll*f[i][j][s1][s2]*C[j][k]%MO*C[t[i+]-][k+l1+l2-]%MO);
for (int i=; i<=; i++)
for (int j=; j<=; j++)
for (int k=; k<=; k++)
Add(ans, f[m][i][j][k]);
printf("%d\n",ans);
return ;
}
END
【动态规划】51nod1780 完美序列的更多相关文章
- 【BZOJ】1006: [HNOI2008]神奇的国度 弦图消除完美序列问题
1006: [HNOI2008]神奇的国度 Description K国是一个热衷三角形的国度,连人的交往也只喜欢三角原则. 他们认为三角关系:即AB相互认识,BC相互认识,CA相互认识,是简洁高效的 ...
- 动态规划求一个序列的最长回文子序列(Longest Palindromic Substring )
1.问题描述 给定一个字符串(序列),求该序列的最长的回文子序列. 2.分析 需要理解的几个概念: ---回文 ---子序列 ---子串 http://www.cnblogs.com/LCCRNblo ...
- js动态规划---最长子序列(lcs)
function LCS(wordX, wordY) { var m = wordX.length; var n = wordY.length; this.lcs = function(){ var ...
- 【51Nod】1510 最小化序列 贪心+动态规划
[题目]1510 最小化序列 [题意]给定长度为n的数组A和数字k,要求重排列数组从而最小化: \[ans=\sum_{i=1}^{n-k}|A_i-A_{i+k}|\] 输出最小的ans,\(n \ ...
- 隐马尔科夫模型HMM(四)维特比算法解码隐藏状态序列
隐马尔科夫模型HMM(一)HMM模型 隐马尔科夫模型HMM(二)前向后向算法评估观察序列概率 隐马尔科夫模型HMM(三)鲍姆-韦尔奇算法求解HMM参数 隐马尔科夫模型HMM(四)维特比算法解码隐藏状态 ...
- hdu 4512 吉哥系列故事——完美队形I【LCIS经典应用】
链接: http://acm.hdu.edu.cn/showproblem.php?pid=4512 http://acm.hust.edu.cn/vjudge/contest/view.action ...
- 动态规划 Dynamic Programming 学习笔记
文章以 CC-BY-SA 方式共享,此说明高于本站内其他说明. 本文尚未完工,但内容足够丰富,故提前发布. 内容包含大量 \(\LaTeX\) 公式,渲染可能需要一些时间,请耐心等待渲染(约 5s). ...
- NOIP2017提高组模拟赛 7(总结)
NOIP2017提高组模拟赛 7(总结) 第一题 斯诺克 考虑这样一个斯诺克球台,它只有四个袋口,分别在四个角上(如下图所示).我们把所有桌子边界上的整数点作为击球点(除了4个袋口),在每个击球点我们 ...
- 【ZOJ】1015 Fishing Net
http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1015 题意:给出一个n个点的无向图,询问是否为弦图,弦图定义为对于图中任意 ...
随机推荐
- jQuery EasyUI/TopJUI创建树形表格下拉框
jQuery EasyUI/TopJUI创建树形表格下拉框 第一种方法(纯HTML创建) <div class="topjui-row"> <div class= ...
- wcf双工通信
一直以为感觉双工没弄懂,着实觉得很惆怅,在网上了解下双工的一些特点,直接上代码,以便以后项目中用的着: service层: 定义一个IDuplexHello服务接口 [ServiceContract( ...
- Js 数组对象排序
1.定义函数 /** * 数组对象排序函数 * @param {any} name 排序字段 * @param {any} order 升.降(这里事true.false记得处理下) */ var b ...
- Vue实例生命周期+vueRoter
Vue实例生命周期 vue生命周期之beforeCreate 实例创建之前除标签外,所有的vue需要的数据,事件都不存在 vue生命周期之created 实例创建之后,data和事件已经被解析到,el ...
- bzoj 5393 [HAOI2018] 反色游戏
bzoj 5393 [HAOI2018] 反色游戏 Link Solution 最简单的性质:如果一个连通块黑点个数是奇数个,那么就是零(每次只能改变 \(0/2\) 个黑点) 所以我们只考虑偶数个黑 ...
- HDU - 3966-Aragorn' Story(树链剖分+线段树)
链接:https://vjudge.net/problem/HDU-3966 题意: Our protagonist is the handsome human prince Aragorn come ...
- 转 AIX filesystemcache引发的Oracle事故
http://blog.itpub.net/26015009/viewspace-1806629/
- Spark Mllib里的本地向量集(密集型数据集和稀疏型数据集概念、构成)(图文详解)
不多说,直接上干货! Local vector : 本地向量集 由两类构成:稀疏型数据集(spares)和密集型数据集(dense) (1).密集型数据集 例如一个向量数据(9,5,2,7),可以设 ...
- WinForm 开发框架 Jade UI Beta
Jade UI Demo Beta 个人网站:http://www.2to.net 开源地址:https://github.com/dcdlove/JadeUI 预览DEMO下载: http://pa ...
- JAVA基础之线程
个人理解: 在相同的进程也就是运行同样的程序的前提下,线程越多效率越快!当然硬件也是个障碍!为了提高效率,可以多创建线程,但是也不是越多越好,这就需要了线程池进行管理!需要知道的线程实现的方法:继承T ...