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

[link](Problem - 4489 (dingbacode.com))

题意

给你n个身高不同的人,问你这些人按照波浪形排列有多少种情况?

波浪形类似于 /\ /\ /\ /\ /

题解

​ 首先要想一种方式可以不重不漏的把所有的方案包含住。这里假设nnn个人的身高是[1,n][1, n][1,n],我们从前往后枚举每一个人,假设当前到了第iii个人,第iii个人前面有i−1i-1i−1个人,所以第iii个人有iii个位置可以放置。假设当前要插在第jjj个位置,那么他一定要满足第j−1j-1j−1个人是以下降过来的(类似于),第n−jn-jn−j个人是以上升到第n−j+1n-j+1n−j+1个人的。

那么插到第jjj个位置的贡献就是

有j−1个人且最后是下降的情况×有n−j个人且开始是上升的情况×Ci−1j−1(前j−1个数是谁)有j-1个人且最后是下降的情况 \times 有n-j个人且开始是上升的情况 \times C_{i-1}^{j -1}(前j-1个数是谁)有j−1个人且最后是下降的情况×有n−j个人且开始是上升的情况×Ci−1j−1​(前j−1个数是谁)。

因此状态表示为

sum[i]:i个人的合法情况
f[i, 0]:i个人并且最后是下降的合法情况

f[i, 1]:i个人并且开始时上升的合法情况

状态转移

sum[i]由前面每一个合法位置的贡献累加起来

每一次的sum[i]的结尾一定是上升或下降过来的,所以f[i, 0] = f[i, 1] = sum[i] / 2

Code

#include <iostream>
#include <algorithm>
#include <cstring>
#include <cstdio>
#include <set>
#include <queue>
#include <vector>
#include <map>
#include <bitset>
#include <unordered_map>
#include <cmath>
#include <stack>
#include <iomanip>
#include <deque>
#include <sstream>
#define x first
#define y second
using namespace std;
typedef long double ld;
typedef long long LL;
typedef pair<int, int> PII;
typedef pair<double, double> PDD;
typedef unsigned long long ULL;
const int N = 1e5 + 10, M = 2 * N, INF = 0x3f3f3f3f, mod = 1e9 + 7;
const double eps = 1e-8;
int dx[] = {-1, 0, 1, 0}, dy[] = {0, 1, 0, -1};
int h[N], e[M], ne[M], w[M], idx;
void add(int a, int b, int v = 0) {e[idx] = b, w[idx] = v, ne[idx] = h[a], h[a] = idx ++;
}
int n, m, k;
LL c[21][21];
LL sum[21];
LL f[21][2]; // f[i][0] 最后一个下降, f[i][1] 第一个上升得到下一个
int main() {ios::sync_with_stdio(false), cin.tie(0);int T;for (int i = 0; i <= 20; i ++ ) for (int j = 0; j <= i; j ++ )if (j) c[i][j] = c[i - 1][j] + c[i - 1][j - 1];else c[i][j] = 1;f[0][0] = f[0][1] = f[1][0] = f[1][1] = 1;sum[1] = 1;for (int i = 2; i <= 20; i ++ ) {for (int j = 1; j <= i; j ++ )sum[i] += f[j - 1][0] * f[i - j][1] * c[i - 1][j - 1];f[i][0] = f[i][1] = sum[i] / 2;}cin >> T;while (T -- ) {cin >> n >> k;cout << n << ' ' << sum[k] << endl;}return 0;
}

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 组合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)

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

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

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

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

  6. HDU-4489-The King’s Ups and Downs

    HDU-4489-The King's Ups and Downs 这道题是一道组合dp=-=嘻嘻 传送门 怎么这么巧捏,我昨天刚刚写了个组合的代码跑概率论,结果今天就来了个组合dp,昨天还苦恼着组合 ...

  7. 【dp】The King‘s Ups and Downs

    题目描述:给一个n,求n个高矮不同的人排成一排使得高.矮依次排列的种数. 考虑状态转移,由于从n-1到n个人多增加了一个身高最高的人,又要求高矮依次排列,因此新加入的这个人只能放在前两个人为高矮,后两 ...

  8. The King’s Ups and Downs HDU - 4489(计数+dp)

    题意 给你一个n问你对这n个人排列使得是波浪型的方案数有多少 题解 我们定义这n个人是1,2,3......n的从小到大的排列方式,当遍历到第i个人时,我们要将这个人插入到前面的i-1个人中,那么我们 ...

  9. 组合dp hdu-4489-The King’s Ups and Downs

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4489 题目意思: 给一个n,求n个高矮不同的人排成一排使得高.矮依次排列的种数. 解题思路: 组合d ...

最新文章

  1. 从ftp获取文件并生成压缩包
  2. python画饼状图的包_Python数据可视化:画饼状图、折线图、圈图
  3. Ubuntu Docker安装
  4. 初识Zookeeper
  5. 程序异常异常代码: 0xc0000005_Java基础:看完这篇你还怕碰到异常吗?
  6. 从职场新人到企业高管,她是怎么做到的?
  7. 这售价要抢疯了?iPhone SE 2再曝光:将搭载A13芯片
  8. 力扣236. 二叉树的最近公共祖先(JavaScript)
  9. 【小白的刷题之路】字符统计
  10. 转写准确率95%,搜狗开放AI技术实现录音笔行业进化
  11. 《重磅 | 机器学习特训营,硅谷导师直播授课,现加入仅需68元!》
  12. jenkins + maven + nexus + [ svn 或 GitLab 或 GitHub ]
  13. bxp帮助文档(转)
  14. 2021年电工(技师)免费试题及电工(技师)试题及解析
  15. FS4054单节锂电池充电管理芯片,IC电路图
  16. 多维泰勒网matlab,非线性定常系统的多维泰勒网优化跟踪控制
  17. Data Base学习记录:ODL
  18. vc++实现avi文件的操作
  19. 以太坊:快速入门 Truffle
  20. 密歇根大学python_密歇根理工大学建立自己的3D打印机课程

热门文章

  1. 机器视觉(四)——机器视觉应用
  2. 营养素揭秘:合成营养素与天然营养素真的有区别吗?
  3. C# Socket编程实现简单的局域网聊天器
  4. 半透明AlphaBlend 实现界面或某块资源的半透明
  5. 用JavaScript实现网红太空人表盘(绝对详细、绝对原创),附源码下载
  6. 云运维拓扑图_云原生架构之【Kubernetes(K8s)】第四部分:资源编排部署和运维管理...
  7. 叮咚!你点的Spring套餐来了!
  8. 2020-12-21
  9. 10道必备的设计模式面试题(值得收藏)
  10. 重磅 | 阿里宣布组织架构大调整,新成立阿里云智能事业群,张建锋兼任总裁...