题目链接

问的是n个不一样的数,大小交替,或者小大交替的种类数量。

n个数,想象成[1,n]的自然数即可。

我们假设大小交替得到的长度为i的排列数为dp1[i],小大交替得到的长度为i的排列数为dp2[i],因为是对称的,其实应该有dp1=dp2,我们要计算的总和sum=dp1+dp2。

我们从小到大考虑各个数,一个个插入队列,考虑到第i个数,称为ai,ai比前i-1个数都大,可以插入的位置j∈[1,i]。

ai前面有i-1个人比自己小,ai选择站在j的位置,在i-1个人中选j-1个人站在ai的前面,排列的情况有C(i-1,j-1)。插入第j个位置,ai属于“高”,要求ai前面和ai衔接的情况是低高,ai和后面一个衔接的情况是高低。所以插入j位置时候的排列数有 dp1[j-1] * dp2[i - j] * c[i-1][j-1]种。

#include <bits/stdc++.h>
using namespace std;#define ll long long
#define mst(a,b) memset(a,b,sizeof(a))
#define rep(i,a,b) for(ll i=(a);i<(b);++i)
const int inf = 0x3f3f3f3f, maxN = 25 + 5;
int N, M, T;ll dp1[maxN];
ll dp2[maxN];
ll sum[maxN];
ll c[maxN][maxN];ll cal(int n, int m) {c[1][0] = c[1][1] = 1;rep(i, 2, n) {c[i][0] = 1;rep(j, 1, n)c[i][j] = c[i - 1][j] + c[i - 1][j - 1];}
}int main() {
#ifndef ONLINE_JUDGEfreopen("data.in", "r", stdin);
#endifcal(20, 20);dp1[0] = dp1[1] = dp2[0] = dp2[1] = 1;sum[1] = 1;rep(i, 2, 20 + 1) {sum[i] = 0;rep(j, 1, i + 1)sum[i] += (dp1[j - 1] * dp2[i - j] * c[i - 1][j - 1]);dp1[i] = dp2[i] = sum[i] / 2;}scanf("%d", &T);rep(i, 1, T + 1) {scanf("%d%d", &M, &N);printf("%d %lld\n", M, sum[N]);}return 0;
}

转载于:https://www.cnblogs.com/Rosebud/p/9077030.html

HDU 4489 The King's Ups and Downs相关推荐

  1. 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/ ...

  2. HDU 4489 The King’s Ups and Downs 组合DP

    The King's Ups and Downs HDU - 4489 给一个整数 nnn,求 {1,⋯,n}\{1,\cdots,n\}{1,⋯,n} 符合以下条件的的排列数: 设 a1,⋯,ana ...

  3. 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 ...

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

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

  5. hdu 4489 The King’s Ups and Downs

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

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

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

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

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

  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. 成员变量和成员函数分开存储
  2. 这些SpringBoot天生自带Buff工具类你都用过哪些?
  3. Vue打包之后会出现.map文件用处
  4. mysql数据库从删库到跑路之mysql完整性约束
  5. Kafka消费者重置offset读取数据
  6. linux centos7 使用 crosstool-ng 构建 交叉编译 工具链 即构建各cpu架构平台的gcc编译器
  7. pytorch list转tensor_PyTorch 52.PyTorch常用代码段合集
  8. 一个学者科研的感受,推荐一下(小木虫)
  9. python爬虫开发数据库设计入门经典_Python3实现的爬虫爬取数据并存入mysql数据库操作示例...
  10. 解决TypeError: string indices must be integers, not str
  11. python刷题_小李飞刀:用python刷题ing....
  12. Dell Inspiron 6400上安装Fedora 5后使声卡义务正常的方法
  13. 程序开发语言c#中的 应该发成什么音,0006. 如何在C# winform 上开发 文字转语音
  14. HBaseRegionServer宕机数据恢复
  15. python: 产品选型小软件
  16. 强化学习7——梯度及梯度下降法
  17. 有便宜又好用的云服务器推荐?
  18. Mac环境下安装hadoop
  19. 数据库系统概述---第二章关系数据库
  20. python2.7.18绿色安装包制作

热门文章

  1. 翻译器附属文件下载地址
  2. RM机器视觉——图像处理、识别装甲板(ROBOMASTER)
  3. linux cgroup限制cpu,Linux Cgroup系列(05):限制cgroup的CPU使用(subsystem之cpu)
  4. 微信小程序开发之图片压缩方案
  5. 基于python中jieba包的中文分词中详细使用(二)
  6. hosts文件屏蔽网址的终极解决方法
  7. React 更新阶段的生命周期 componentWillReceiveProps->shouldComponentUpdate->componentWillUpdate
  8. LeetCode每日一题——811. 子域名访问计数
  9. 射频识别技术漫谈(3)——能量、调制
  10. 《STM32从零开始学习历程》——I2C协议层