The King’s Ups and Downs HDU - 4489

给一个整数 nnn,求 {1,⋯,n}\{1,\cdots,n\}{1,⋯,n} 符合以下条件的的排列数:

设 a1,⋯,ana_1,\cdots,a_na1​,⋯,an​ 为一个排列,要求该排列中:

⋯>ak−1<ak>ak+1<ak+2>ak+3<⋯\cdots>a_{k-1}<a_k>a_{k+1}<a_{k+2}>a_{k+3}<\cdots⋯>ak−1​<ak​>ak+1​<ak+2​>ak+3​<⋯

按从 111 到 nnn 的顺序插入到队列中,令 dp[i]dp[i]dp[i] 为前 iii 个对应的排列数,并且要求结尾时 “高低”(同样也可以用来表示前 iii 个对应的排列,开头是 “低高”) 则有:

dp[i]=12∑j=0i−1dp[j]∗dp[i−j−1]∗Ci−1jdp[i]=\frac{1}{2}\sum_{j=0}^{i-1}dp[j]*dp[i-j-1]*C_{i-1}^j dp[i]=21​j=0∑i−1​dp[j]∗dp[i−j−1]∗Ci−1j​

也就是说当插入 iii 时,首先选一个位置,这个位置前面有 jjj 个数,其末尾为 “高低”,这个位置后面有 i−j−1i-j-1i−j−1 个数,其开头为 “低高”,求和得到的结果即为前 iii 个对应的排列数,再除以 222 得到的是结尾限制为 “高低” 对应的排列数(同时也可以表示开头限制为 “低高” 对应的排列数)

求组合数 CijC_i^jCij​

Cij=Ci−1j+Ci−1j−1C_i^j=C_{i-1}^j+C_{i-1}^{j-1} Cij​=Ci−1j​+Ci−1j−1​

代码如下:

#include<iostream>
#include<cstdio>
#define MAXN 21
using namespace std;
typedef long long ll;
int T,t,n;
ll c[MAXN][MAXN],dp[MAXN];
int main(){#ifdef WINEfreopen("data.in","r",stdin);
#endiffor(int i=0;i<=MAXN;i++)c[i][i]=c[i][0]=1;for(int i=1;i<=MAXN;i++)for(int j=1;j<i;j++)c[i][j]=c[i-1][j]+c[i-1][j-1];dp[0]=dp[1]=1;for(int i=2;i<=MAXN;i++){ll res=0;for(int j=0;j<i;j++)res+=dp[j]*dp[i-j-1]*c[i-1][j];dp[i]=res/2;}scanf("%d",&T);while(T--){scanf("%d%d",&t,&n);printf("%d %lld\n",t,(n==1?1:dp[n]*2));}return 0;
}

HDU 4489 The King’s Ups and Downs 组合DP相关推荐

  1. HDU 4489 The King’s Ups and Downs(组合DP)

    作者:Accagain 链接:点击打开链接 原题 The King's Ups and Downs Time Limit: 2000/1000 MS (Java/Others) Memory Limi ...

  2. hdu 4489 The King’s Ups and Downs 组合 递推

    题意:给定n个个数1~n.要求他们排成一列满足"波浪型".第一个大于第二个,第二大于第三个,(或者第一个小于第二个,第二个小于第三个..)也就是相对的高矮高矮...或矮高矮高..依 ...

  3. HDU - 4489 The King’s Ups and Downs(dp)

    题目链接 题目大意: 给一个n,求身高为1-n的n个人排成 高低高低高低  或 低高低高低高 这种波浪式的形状有多少种: 思路: 把第n个人插到前n-1个人的序列中,序列中共有n个空位,第n个人一定是 ...

  4. HDU - 4489 The King’s Ups and Downs (排列组合+dp)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4489点击打开链接 The King's Ups and Downs Time Limit: 2000/ ...

  5. hdu 4489 The King’s Ups and Downs【递推】

    题目 http://acm.hdu.edu.cn/showproblem.php?pid=4489 题意 给一个n,求n个高矮不同的人排成一排使得高.矮依次排列的种数. 分析 我们不妨把n个人的身高设 ...

  6. hdu 4489 The King’s Ups and Downs

    看到n<=20我就想暴力打表找出所有情况了:但死在第15组,要花的时间太久了: 然后就想着推嘛:每次加入一个当前情况最大的数:合理的位置就是高低高低高:所以要找前面高低的情况n,后面低高的情况m ...

  7. HDU 4489 The King's Ups and Downs

    题目链接 问的是n个不一样的数,大小交替,或者小大交替的种类数量. n个数,想象成[1,n]的自然数即可. 我们假设大小交替得到的长度为i的排列数为dp1[i],小大交替得到的长度为i的排列数为dp2 ...

  8. The King’s Ups and Downs (线性DP)

    The King's Ups and Downs (线性DP) [link](Problem - 4489 (dingbacode.com)) 题意 给你n个身高不同的人,问你这些人按照波浪形排列有多 ...

  9. 6177 The King’s Ups and Downs(组合dp)

    欢迎访问https://blog.csdn.net/lxt_Lucia-- 宇宙第一小仙女\(^o^)/--萌量爆表求带飞=≡Σ((( つ^o^)つ~ dalao们点个关注呗-- ---------- ...

最新文章

  1. Kaggle大神:竞赛代码别删,这都是宝藏
  2. float相乘后的类型_Psychopy | 第1期:数据类型及运算符
  3. Python-DDT框架
  4. TIM怎么设置禁止窗口抖动 TIM防抖设置技巧
  5. python-函数的嵌套调用
  6. 《Python程序设计》实验指导书(30个实验)
  7. python 跳出for循环_Python跳出多重循环的方法
  8. C# 不借助第三个变量实现两整数交换
  9. 算法:合并两个有序链表21. Merge Two Sorted Lists
  10. 5分钟快速入门GIS(GIS基础)(GIS当中常见数据)
  11. JS学习3-Js运算符优先级
  12. IDEA插件开发之基础篇
  13. 怎么用计算机进行气象预报,行测言语理解与表达片段阅读:1、中央气象台进行天气预报,先用计算机解出描述天气演变的方程组...
  14. 服务器 备份 本地文件,云服务器备份本地文件
  15. 揭秘支付机构【备付金】管理过程
  16. Excel数据透视表经典教程十《值的汇总及显示方式》
  17. 堆与栈区别,以及分配内存的快慢
  18. oracle分区表优点
  19. 电脑公司 ghost win7_SP1 X64 特别版 2015.05
  20. python中in什么意思_python中5in什么意思

热门文章

  1. 拉马努金:“与神对话”的数学天才
  2. Darknet在ubuntu下的安装
  3. word中如何选中已经衬于文字下的形状
  4. 9月发布下代iPhone?8月7寸iPad上市?
  5. 基于SSM+MySQL+Bootstrap的在线购物商城系统
  6. 计算机pdf转换word,电脑pdf改成word格式,值得收藏的方法!
  7. leetcode 题解 (500-1000题,持续更新,part 2)
  8. oracle官方培训地址
  9. 西湖大学开学:新生每月5000元补助,AI博士研究永生课题
  10. 试玩接入ironsource技巧