首页
Python
Java
IOS
Andorid
NodeJS
JavaScript
HTML5
【
【51nod】1934 受限制的排列
】的更多相关文章
51nod 1934 受限制的排列——笛卡尔树
题目:http://www.51nod.com/Challenge/Problem.html#!#problemId=1934 根据给出的信息,可以递归地把笛卡尔树建出来.一个点只应该有 0/1/2 个孩子,不然就是无解. dp[ cr ] 表示把 1~siz[cr] 填进 cr 这个子树的方案数.那么 \( dp[cr]=C_{siz[cr]-1}^{siz[ls]}*dp[ls]*dp[rs] \) . 注意在各种地方判断无解!如果是 l , cr , r 的话,左孩子应该是 l , ls…
【51nod】1934 受限制的排列
题解 这题还要判无解真是难受-- 我们发现我们肯定能确定1的位置,1左右的两个区间是同理的可以确定出最小值的位置 我们把区间最小值看成给一个区间+1,构建出笛卡尔树,就求出了每一次取最小值和最小值左右的区间大小 然后就相当于左右子树的排列方式,乘上把左右子树那么多个元素选出左子树个数和右子树个数那么多的方案数,是个普通的组合数 判无解从根开始,要求根的区间是[1,N],左右区间是[1,rt-1][rt + 1,R]递归判下去就好 复杂度\(O(n)\) 但是跑得奇慢无比= =,我脑子一抽把数组改…
51NOD 1934:受限制的排列——题解
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1934 听说会笛卡尔树的人这题都秒了啊…… 参考:https://blog.csdn.net/vectorxj/article/details/79475244 首先题得看懂(我就是看题解才看懂题面的……),它告诉你对于i,我们有最大的(li,ri)使得这个区间内pi最小. 于是最小的数一定是(1,n)区间内的,设为pos,那么我们只需要递归处理(1,pos-1)和(po…
51nod1934:受限制的排列 (分治+组合数)
对于一个 11 到 nn 的排列 p1,p2,⋯,pnp1,p2,⋯,pn ,我们可以轻松地对于任意的 1≤i≤n1≤i≤n 计算出 (li,ri)(li,ri) ,使得对于任意的 1≤L≤R≤n1≤L≤R≤n 来说 min(pL,pL+1,⋯,pR)=pimin(pL,pL+1,⋯,pR)=pi 当且仅当 li≤L≤i≤R≤rili≤L≤i≤R≤ri . 给定整数 nn 和 (li,ri)(li,ri) (1≤i≤n)(1≤i≤n) ,你需要计算有多少种可能的 11 …
51nod 1296 有限制的排列(DP)
对于一个i,如果要比邻居大,那么i比i-1大,i+1比i小,比邻居小同理.设v[i]=0表示i与i-1的关系无限制,v[i]=1表示a[i-1]>a[i],v[i]=2表示a[i-1]<a[i] 则有 显然这个是可以用前缀和优化成O(N^2)的 #include<iostream> #include<cstring> #include<cstdlib> #include<cstdio> #define MOD(x) (x>=mod?x-mo…
胡小兔的OI日志3 完结版
胡小兔的 OI 日志 3 (2017.9.1 ~ 2017.10.11) 标签: 日记 查看最新 2017-09-02 51nod 1378 夹克老爷的愤怒 | 树形DP 夹克老爷逢三抽一之后,由于采用了新师爷的策略,乡民们叫苦不堪,开始组织起来暴力抗租. 夹克老爷很愤怒,他决定派家丁常驻村中进行镇压. 诺德县 有N个村庄,编号0 至 N-1,这些村庄之间用N - 1条道路连接起来. 家丁都是经过系统训练的暴力机器,每名家丁可以被派驻在一个村庄,并镇压当前村庄以及距离该村庄不超过K段道路的村庄.…
51nod 1364 最大字典序排列(线段树)
1364 最大字典序排列基准时间限制:1 秒 空间限制:131072 KB 分值: 80 难度:5级算法题 给出一个1至N的排列,允许你做不超过K次操作,每次操作可以将相邻的两个数交换,问能够得到的字典序最大的排列是什么? 例如:N = 5, {1 2 3 4 5},k = 6,在6次交换后,能够得到的字典序最大的排列为{5 3 1 2 4}. Input 第1行:2个数N, K中间用空格分隔(1 <= N <= 100000, 0 <= K <= 10^9). 第2至N + 1行…
51nod 1020 逆序排列
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1020 题意: 思路: 一开始用了三重循环... 设f(n,k)表示n个数的排列中逆序数个数为k的排列数. 最大的数n可能会排在第n-i位,从而产生i个与n有关的逆序对,去掉n之后,剩下的n-1个数的排列有k-i个逆序对.所以,f(n,k)=求和(f(n-1,k-i))(0<=i<n). 同理有f(n,k-1)=求和(f(n-1,k-1-i))(0<=i<n…
51Nod 1250 排列与交换
Description 统计 \(1...n\) 的排列,恰好进行 \(k\) 次相邻交换和至多进行 \(k\) 次交换生成的不同的序列个数. Sol DP. 好妙的题啊... 首先看第一个问题. 对于相邻元素的交换,我们建立状态 \(f[i][j]\) 表示前 \(i\) 个数进行 \(j\) 次交换的方案数. 我们分类来讨论 \(i\) 元素是否参与交换. 如果不参与交换 \(f[i][j]+=f[i-1][j]\) 如果参与交换,那么它最远能交换到的位置就是 \(i-j\) \(f[i][…
51nod 1020 逆序排列 DP
在一个排列中,如果一对数的前后位置与大小顺序相反,即前面的数大于后面的数,那么它们就称为一个逆序.一个排列中逆序的总数就称为这个排列的逆序数. 如2 4 3 1中,2 1,4 3,4 1,3 1是逆序,逆序数是4. 1-n的全排列中,逆序数最小为0(正序),最大为n*(n-1) / 2(倒序) 给出2个数n和k,求1-n的全排列中,逆序数为k的排列有多少种? 例如:n = 4 k = 3. 1 2 3 4的排列中逆序为3的共有6个,分别是: 1 4 3 2 2 3 4 1 2 4 1 3 3 1…